ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: 非同期 ( 部分的 )
名前: lightbox
処理選択
パスワード

件名 非同期 ( 部分的 )
名前 lightbox
コメント
@DIV
Public Class Form1

	' 非シグナル状態( 待つ状態 )
	Public Shared allDone As New System.Threading.ManualResetEvent(False)

	Private Sub Button1_Click(ByVal sender As System.Object, _
			ByVal e As System.EventArgs) Handles Button1.Click

		' HTTP の最大接続数
		System.Net.ServicePointManager.DefaultConnectionLimit = 2

		' HttpWebRequestの作成
		Dim request As System.Net.HttpWebRequest = _
		  System.Net.HttpWebRequest.Create("http://winofsql.sakura.ne.jp/lightbox/euc.php")
		request.Method = "GET"

		request.UserAgent = "lightbox"

		Console.WriteLine(request.KeepAlive)
		Console.WriteLine(request.Timeout)		' 100,000 ミリ秒 (100 秒)

		Dim result As IAsyncResult = _
		   CType(request.BeginGetResponse( _
		   New AsyncCallback(AddressOf ResponseCallback), request), IAsyncResult _
		  )

		' 呼び出したスレッドむの終了を待つ
		allDone.WaitOne()

		Console.WriteLine("END:" + result.ToString())

	End Sub

	Private Shared Sub ResponseCallback(ByVal asynchronousResult As IAsyncResult)

		' サーバー側のエンコーディング
		Dim enc As System.Text.Encoding = _
		 System.Text.Encoding.GetEncoding("euc-jp")

		Try

			' HttpWebResponse の取得
			Dim response As System.Net.HttpWebResponse
			Try
				response = CType(asynchronousResult.AsyncState, System.Net.HttpWebRequest).GetResponse()
				' ステータスコード
				Console.WriteLine(response.StatusCode)	' 200
				Console.WriteLine(response.StatusCode.ToString())  ' OK
				Console.WriteLine(response.StatusDescription)	' OK
			Catch ex As Exception
				' エラー例 : リモート サーバーがエラーを返しました: (404) 見つかりません
				Console.WriteLine(ex.ToString())
				Return
			End Try

			' ヘッダを KEY=VALUE で表示
			Dim key As String
			For Each key In response.Headers
				Console.WriteLine(key + "=" + response.Headers(key))
			Next

			Console.WriteLine()
			' ヘッダのまま表示
			Console.WriteLine(response.Headers)

			' Content-Type: text/html; Charset=euc-jp
			Console.WriteLine(response.ContentType)

			' Stream を取得
			Dim data_stream As System.IO.Stream = response.GetResponseStream()
			' 受信
			Dim stream_reader As New System.IO.StreamReader(data_stream, enc)

			' 表示
			Console.WriteLine(stream_reader.ReadToEnd())

			' 閉じる
			' ※ オブジェクトと、その基になるストリームを閉じ、
			' ※ リーダーに関連付けられたすべてのシステムリソースを解放
			stream_reader.Close()

			response.Close()

		Catch ex As Exception
			Console.WriteLine(ex.Message)
		End Try

		Dim ret As Integer = -1

		CType(asynchronousResult.AsyncState, System.Net.HttpWebRequest).EndGetResponse(asynchronousResult)
		' 本体に終了を通知
		allDone.Set()

	End Sub

End Class
@END