SQLの窓

2010年06月22日


VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバー( TcpListener )

最新版はこちらです
VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU

クライアントからサーバーへ送られる送られる生データを確認
したかったので作成しました。コマンドブロンプトなので、CTRL+C で
強制終了しますが、ブラウザから http://127.0.0.1:50000/quit で正式に
終了します
ブラウザでダウンロード
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Diagnostics
Imports System.Threading

Module MyModule

' ********************************************************
' 
' ********************************************************
Sub Main()

	' スレッド開始   
	Dim ThreadServer As New Thread(AddressOf ThreadEntry)
	ThreadServer.Start() 
	ThreadServer.Join()
	Console.WriteLine("処理は終了しました")

End Sub

Sub ThreadEntry()   

	Dim server As TcpListener = Nothing
	Dim header As String = _
		"HTTP/1.1 200 OK" + ControlChars.CrLf + ControlChars.CrLf + "response:OK"
	Try
		' 50000 番ポート使用
		Dim port As Int32 = 50000
		' ローカル
		Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1")

		' サーバーのインスタンスを作成
		server = New TcpListener(localAddr, port)
		' サーバー開始
		server.Start()

		' 読み込みバッファ
		Dim bytes(1024) As Byte
		' コマンドワーク
		Dim data As String = Nothing
		Dim bEnd As Boolean = False

		Do While True  

			' 接続待ち
			Console.WriteLine("Waiting ... ")

			' 待機( 接続されると次の行へ )
			Dim client As TcpClient = server.AcceptTcpClient()
			' 受信したので処理開始
			Console.WriteLine("Connected")
			Console.WriteLine("-----------------------------")

			data = ""  

			' 受信用ストリーム   
			Dim stream As NetworkStream = client.GetStream()   

			Dim i As Integer
			Dim cd As Integer = 0

			' **************************************************
			' ストリームからデータを取得( 初回 )
			' bytes : 1024
			' **************************************************
			i = stream.Read(bytes, 0, bytes.Length)

			Do While i <> 0
	
				' 最大1024バイトの処理
				cd = 0
				For idx As Integer = 0 To i - 1
	
					' Windows 改行の1バイト目
					If bytes(idx) = &HD Then
						' 改行数
						cd += 1
					End If
	
					' 改行後の最初
					If cd = 0 Then
						data += _
						 Encoding.ASCII.GetString(bytes, idx, 1)
					End If
	
					' Windows 改行の2バイト目
					If bytes(idx) = &HA And cd = 1 Then

						' 改行区切りでコマンドを取得
						Console.WriteLine("{0}", data)

						Dim Command As String() = data.Split(" ")
						If Command(0) = "GET" Then  
								data = Command(1).Substring(1)
						end if

						' quit で終了
						If data = "quit" Then
							bEnd = True
						End If
	
						' 行単位の処理の為の初期化
						cd = 0
						data = ""
					End If
				Next

				' 受信ヘッダ完了
				If data = "" Then  
					' OK を返す   
					Dim msg As Byte() = _   
					 Encoding.GetEncoding(932).GetBytes( _   
					 header)   
					stream.Write(msg, 0, msg.Length)   
					Exit Do  
				End If  
				' 残っているデータをストリームから取得
				i = stream.Read(bytes, 0, bytes.Length)
	
			Loop

			' 処理終了で接続解除してサービス終了
			client.Close()

			' quit で終了
			If bEnd Then
				Exit Do
			End If

		Loop

	Catch ex As SocketException
		Console.WriteLine("SocketException: {0}", ex)
	Finally
		server.Stop()
	End Try

End Sub

End Module



posted by lightbox at 2010-06-22 00:36 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり