Socketを使ってファイルをダウンロードし表示するSocketクラスを使ってHTTPサーバーにGET要求し、応答を受信するサンプルです。かなり上級者向けの方法です。通常はWebRequest、WebResponseクラスを使う方法で十分でしょう。分かる人のみ参考にしてください。 [VB.NET] 'GETリクエストを送信するサーバー名とパス Dim server As String = "www.google.co.jp" Dim path As String = "/" 'リクエストメッセージを作成する Dim reqMsg As String = "GET " + path + " HTTP/1.1" + vbCrLf + _ "Host: " + server + vbCrLf + "Connection: Close" + vbCrLf + vbCrLf '文字列をbyte配列に変換 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim reqBytes As Byte() = enc.GetBytes(reqMsg) 'ホスト名からIPアドレスを取得 Dim hostadd As System.Net.IPAddress = _ System.Net.Dns.Resolve(server).AddressList(0) 'または 'System.Net.IPAddress hostadd = _ ' System.Net.Dns.GetHostByName(server).AddressList(0) 'IPEndPointを取得 Dim ephost As New System.Net.IPEndPoint(hostadd, 80) 'Socketの作成 Dim sock As New System.Net.Sockets.Socket( _ System.Net.Sockets.AddressFamily.InterNetwork, _ System.Net.Sockets.SocketType.Stream, _ System.Net.Sockets.ProtocolType.Tcp) '接続 sock.Connect(ephost) 'リクエストメッセージを送信 sock.Send(reqBytes, reqBytes.Length, _ System.Net.Sockets.SocketFlags.None) '受信する Dim resBytes(1023) As Byte Dim mem As New System.IO.MemoryStream While True Dim resSize As Integer = _ sock.Receive(resBytes, resBytes.Length, _ System.Net.Sockets.SocketFlags.None) If resSize = 0 Then Exit While End If mem.Write(resBytes, 0, resSize) End While Dim resMsg As String = _ enc.GetString(mem.GetBuffer(), 0, CInt(mem.Length)) mem.Close() '閉じる sock.Shutdown(System.Net.Sockets.SocketShutdown.Both) sock.Close() '受信したメッセージを表示する Console.WriteLine(resMsg) [C#] //GETリクエストを送信するサーバー名とパス string server = "www.google.co.jp"; string path = "/"; //リクエストメッセージを作成する string reqMsg = "GET " + path + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: Close\r\n\r\n"; //文字列をbyte配列に変換 System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); byte [] reqBytes = enc.GetBytes(reqMsg); //ホスト名からIPアドレスを取得 System.Net.IPAddress hostadd = System.Net.Dns.Resolve(server).AddressList[0]; //または //System.Net.IPAddress hostadd = // System.Net.Dns.GetHostByName(server).AddressList[0]; //IPEndPointを取得 System.Net.IPEndPoint ephost = new System.Net.IPEndPoint(hostadd, 80); //Socketの作成 System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket( System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); //接続 sock.Connect(ephost); //リクエストメッセージを送信 sock.Send(reqBytes, reqBytes.Length, System.Net.Sockets.SocketFlags.None); //受信する byte [] resBytes = new byte[1024]; System.IO.MemoryStream mem = new System.IO.MemoryStream(); while (true) { int resSize = sock.Receive(resBytes, resBytes.Length, System.Net.Sockets.SocketFlags.None); if (resSize == 0) break; mem.Write(resBytes, 0, resSize); } string resMsg = enc.GetString(mem.GetBuffer(), 0, (int) mem.Length); mem.Close(); //閉じる sock.Shutdown(System.Net.Sockets.SocketShutdown.Both); sock.Close(); //受信したメッセージを表示する Console.WriteLine(resMsg);
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|