2016年4月3日日曜日

Socketクラスを使ってファイルをダウンロードする方法

Network programming in .NET: C# & Visual Basic …
Socketクラスを使ってファイルをダウンロードする方法
VB.NET
Dim server As String = "wwwサーバーURL.co.jp"
Dim path As String = "/"
Dim reqMsg As String = "GET " + path + " HTTP/1.1" + vbCrLf + _
    "Host: " + server + vbCrLf + "Connection: Close" + vbCrLf + vbCrLf
Dim enc As System.Text.Encoding = _
    System.Text.Encoding.GetEncoding("shift_jis")
Dim reqBytes As Byte() = enc.GetBytes(reqMsg)

Dim hostadd As System.Net.IPAddress = _
    System.Net.Dns.Resolve(server).AddressList(0)
Dim ephost As New System.Net.IPEndPoint(hostadd, 80)

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)
Network programming in .NET: C# & Visual Basic …
C#

string server = "wwwサーバーURL.co.jp";
string path = "/";
string reqMsg = "GET " + path + " HTTP/1.1\r\n" +
    "Host: " + server + "\r\n" +
    "Connection: Close\r\n\r\n";
System.Text.Encoding enc =
    System.Text.Encoding.GetEncoding("shift_jis");
byte [] reqBytes = enc.GetBytes(reqMsg);

System.Net.IPAddress hostadd =
    System.Net.Dns.Resolve(server).AddressList[0];
System.Net.IPEndPoint ephost =
    new System.Net.IPEndPoint(hostadd, 80);

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);

Network programming in .NET: C# & Visual Basic …