6 6-1 6-2 Socket 6-2-1 Socket 6-2-2 TcpClient 6-3 6-3-1 Socket.Connect 6-3-2 TcpClient.Connect 6-4 6-4-1 Socket.Send / Receive 6-4-2 NetworkStream 6-5 6-5-1 Socket.Close 6-5-2 TcpClient.Close 6-6 DateTime
Socket Microsoft.NET Framework Socket TcpListener Microsoft.NET Framework 6-1 Microsoft.NET Framework System.Net.Sockets.Socket System.Net.Sockets.TcpClient System.Net.Sockets.Socket 6-2
6 System.Net.Sockets.TcpClient Socket 1. Socket DNS IP Internet 2. 3. 4. Socket Microsoft.NET Framework Socket TcpClient 6-2 Socket System.Net.Sockets Socket TcpClient 6-3
6-2-1 Socket System.Net.Sockets.Socket Bind Listen Accept Connect System.Net.Sockets.Socket Socket 5-2-1 Public Sub New (socketinformation As SocketInformation) Public Sub New (addressfamily As AddressFamily, _ sockettype As SocketType,protocolType As ProtocolType) Socket TCP Imports System.Net.Sockets Dim clientsocket As New Socket( _ AddressFamily.InterNetwork, SocketType.Stream, _ ProtocolType.Tcp) Catch ex As SocketException End Socket Socket IP Internet Socket Socket System.Net.IPEndPoint IP 6-4
6 Imports System.Net Dim serverip As IPAddress = _ Dns.Resolve("Server").AddressList(0) Dim serverhost As New IPEndPoint(serverIP, 80) Catch ex As ArgumentException End 6-2-2 TcpClient System.Net.Sockets.Socket Socket System.Net.Sockets.TcpClient TCP TcpClient Socket TCP Public Sub New () Public Sub New (family As AddressFamily) Public Sub New (localep As IPEndPoint) Public Sub New (hostname As String, port As Integer) 6-5
1. family System.Net.Sockets.AddressFamily IP 4-1-1 2. localep System.Net.IPEndPoint IP Socket localep 4-1-2 3. hostname DNS IP DNS ArgumentNullException 4. port Internet port String Int32.Parse() 4-1-2 System.ArgumentException family AddressFamily InterNetwork InterNetworkV6 System.ArgumentNullException localep hostname Nothing System.ArgumentOutOfRangeException port MinPort MaxPort System.Net.Sockets.SocketException TcpClient Socket ' TcpClient Dim tcpclient As New TcpClient() ' IP Dim ipaddress As IPAddress = _ Dns.Resolve(Dns.GetHostName()).AddressList(0) Dim LocalEP As New IPEndPoint(ipAddress, < >) 6-6
6 Dim tcpclient As New TcpClient(LocalEP) Catch e As Exception End ' Dim tcpclient As New TcpClient("< >", 80) Catch e As Exception End Socket TcpClient TCP Socket TcpClient Socket TcpClient Socket 6-3 Socket TcpClient Socket Socket TcpClient 6-3-1 Socket.Connect Socket Connect Public Sub Connect (remoteep As EndPoint) Public Sub Connect (address As IPAddress, port As Integer) 6-7
Public Sub Connect (addresses As IPAddress(), port As Integer) Public Sub Connect (host As String, port As Integer) 1. remoteep System.Net.IPEndPoint IP 4-1-2 2. address IP System.Net.IPAddress 4-1-1 3. host DNS 4. port 4-1-2 System.ArgumentNullException remoteep Nothing System.ArgumentOutOfRangeException port MinPort MaxPort System.Net.Sockets.SocketException Socket System.InvalidOperationException Socket System.NotSupportedException System.ObjectDisposedException Socket System.Security.SecurityException Socket Imports System.Net Imports System.Net.Sockets Dim clientsocket As New Socket( _ AddressFamily.InterNetwork, _ SocketType.Stream, ProtocolType.Tcp) Dim serverip As IPAddress = _ Dns.Resolve("Server").AddressList(0) 6-8
6 Dim serverhost As New IPEndPoint(serverIP, 80) clientsocket.connect(serverhost) Catch ex As SocketException End System.Net.Sockets.Socket Berkeley Socket Distribution API Socket Connect BSD Synchronous I/O Asynchronous Socket BeginConnect EndConnect BeginConnect Public Function BeginConnect (remoteep As EndPoint, _ callback As AsyncCallback, state As Object _ ) As IAsyncResult Public Function BeginConnect (address As IPAddress, _ port As Integer, requestcallback As AsyncCallback, _ state As Object) As IAsyncResult Public Function BeginConnect (addresses As IPAddress(), _ port As Integer, requestcallback As AsyncCallback, _ state As Object) As IAsyncResult Public Function BeginConnect (host As String, _ port As Integer, requestcallback As AsyncCallback, _ state As Object) As IAsyncResult 6-9
1. remoteep System.Net.IPEndPoint IP 4-1-2 2. address IP System.Net.IPAddress 4-1-1 3. host DNS 4. port 4-1-2 5. callback AsyncCallback Callback 6. state IAsyncResult System.ArgumentNullException remoteep Nothing System.Net.Sockets.SocketException Socket System.ObjectDisposedException Socket Dim clientsocket As New Socket( _ AddressFamily.InterNetwork, _ SocketType.Stream, ProtocolType.Tcp) Dim serverip As IPAddress = _ Dns.Resolve("Server").AddressList(0) Dim serverhost As New IPEndPoint(serverIP, 80) clientsocket.beginconnect(serverhost, _ New AsyncCallback( _ AddressOf Async_Send_Receive.Connect_Callback), _ clientsocket) 6-10
6 Catch ex As Exception End EndConnect Public Sub EndConnect (asyncresult As IAsyncResult) asyncresult System.ArgumentNullException asyncresult Nothing System.ArgumentException asyncresult BeginConnect System.Net.Sockets.SocketException Socket System.ObjectDisposedException Socket 6-3-2 TcpClient.Connect Socket Connect TcpClient Connect Public Sub Connect (remoteep As IPEndPoint) Public Sub Connect (address As IPAddress, port As Integer) Public Sub Connect (hostname As String, port As Integer) 6-11
Public Sub Connect (ipaddresses As IPAddress(), port As Integer) 1. remoteep System.Net.IPEndPoint IP 4-1-2 2. address IP System.Net.IPAddress 4-1-1 3. hostname DNS IP DNS ArgumentNullException 4. port 4-1-2 5. ipaddresses IP System.Net.IPAddress System.ArgumentNullException remoteepaddresshostname ipaddresses Nothing System.ArgumentOutOfRangeException port MinPort MaxPort System.Net.Sockets.SocketException Socket System.NotSupportedException System.ObjectDisposedException TcpClient System.Security.SecurityException Socket ' IPEndPoint Dim tcpclient As New TcpClient() Dim ipaddress As IPAddress = _ Dns.Resolve("<Server>").AddressList(0) Dim remoteep As New IPEndPoint(ipAddress, < >) 6-12
6 tcpclient.connect(remoteep) Catch e As Exception End ' IP Dim tcpclient As New TcpClient() Dim ipaddress As IPAddress = _ Dns.Resolve("<Server>").AddressList(0) tcpclient.connect(ipaddress, < >) Catch e As Exception End ' DNS Dim tcpclient As New TcpClient() tcpclient.connect("<server>", < >) Catch e As Exception End 6-13
Socket TcpClient TCP Socket TcpClient Connect Connect BeginConnect - EndConnect - 6-4 Request Response Socket TcpClient 6-4-1 Socket.Send / Receive 5-4-1 Socket Socket 1. Send Socket SendTo IP SendFile Socket 2. Receive Socket ReceiveFrom IP ReceiveMessageFrom Socket 5-4-1 6-14
6 6-4-2 NetworkStream Socket TcpClient TcpClient TcpClient TcpClient GetStream Input/Output Stream 5-4-2 Dim tcpclient As New TcpClient() Dim networkstream As NetworkStream = tcpclient.getstream() If networkstream.canread Then Dim bytes(tcpclient.receivebuffersize) As Byte networkstream.read(bytes, 0, _ CInt(tcpClient.ReceiveBufferSize)) Dim msg As String = Encoding.ASCII.GetString(bytes) End If Catch ex As Exception End 6-15
Dim tcpclient As New TcpClient() Dim networkstream As NetworkStream = tcpclient.getstream() If networkstream.canwrite Then Dim msg As [Byte]() = Encoding.ASCII.GetBytes("") networkstream.write(msg, 0, msg.length) End If Catch ex As Exception End NetworkStream Public Sub New (socket As Socket) Public Sub New (socket As Socket, ownssocket As Boolean) Public Sub New (socket As Socket, access As FileAccess) Public Sub New (socket As Socket, _ access As FileAccess, ownssocket As Boolean) Socket Socket Socket SendSendToSendFileReceiveReceiveFrom ReceiveMessageFrom NetworkStream Dim clientsocket As New Socket( _ AddressFamily.InterNetwork, _ SocketType.Stream, ProtocolType.Tcp) 6-16
6 Dim serverip As IPAddress = _ Dns.Resolve("Server").AddressList(0) Dim serverhost As New IPEndPoint(serverIP, 80) clientsocket.connect(serverhost) Dim networkstream As New NetworkStream(clientSocket) Catch ex As SocketException End Socket TcpClient TCP Socket TcpClient Receive ReceiveFrom ReceiveMessageFrom Send SendFile SendTo Read ReadByte Write WriteByte - Close 6-17
6-5 Socket TcpClient 6-5-1 Socket.Close Socket Socket Close Socket Public Sub Close Public Sub Close (timeout As Integer) timeout Socket Close Socket Socket Connected False Public ReadOnly Property Connected As Boolean Socket Shutdown Socket Public Sub Shutdown (how As SocketShutdown) how System.Net.Sockets.SocketShutdown SocketShutdown.Send SocketShutdown.Receive SocketShutdown.Both System.Net.Sockets.SocketException Socket System.ObjectDisposedException Socket 6-18
6 clientsocket.shutdown(socketshutdown.both) clientsocket.close() If clientsocket.connected Then End If 6-5-2 TcpClient.Close TcpClient TcpClient TcpClient Close Public Sub Close() System.Net.Sockets.SocketException 6-19
Dim tcpclient As New TcpClient() tcpclient.close() 6-6 DateTime DateTime Socket TcpClient 5-8 5-9 Client/Server 6-1 DateTimeClient.vb Imports System Imports System.IO Imports System.Net Imports System.Net.Sockets Imports System.Text 6-20
6 Public Class DateTimeClient Public Shared Sub Main() Dim args As String() = Environment.GetCommandLineArgs() If (args.length < 2) Then Console.WriteLine("Usage: _ DateTimeClient [DateTimeServer DNS/IP]") Exit Sub End If Dim serverhost As String = args(1) Dim hostadd As IPAddress = _ Dns.Resolve(serverHost).AddressList(0) Dim EPhost As New IPEndPoint(hostadd, 13) Dim clientsocket As New Socket( _ AddressFamily.InterNetwork, _ SocketType.Stream, ProtocolType.Tcp) clientsocket.connect(ephost) Catch ex As Exception Console.WriteLine(ex.ToString()) End Dim recvbytes(1024) As Byte Dim i As Integer = clientsocket.receive( _ recvbytes, 0, clientsocket.available, _ SocketFlags.None) Dim datetime As String = _ Encoding.ASCII.GetString(recvbytes, 0, i) Console.WriteLine("Receive {0} bytes.", i) Console.WriteLine("Current server date/time: {0}", _ datetime) 6-21
clientsocket.shutdown(socketshutdown.both) clientsocket.close() Catch ec As Exception Console.WriteLine(ec.StackTrace.ToString()) Exit Sub End Console.WriteLine("Press any key to exit.") Console.Read() End Sub End Class Socket DateTime 13 Socket Connect remoteep 13 DOS DOS DNS IP System.Environment GetCommandLineArgs Dim args As String() = Environment.GetCommandLineArgs() Dim serverhost As String = args(1) System.Environment GetCommandLineArgs Java main() args public static void main(string[] args) { String host; host = args[0]; } 6-22
6 Socket Receive Receive Encoding.ASCII.GetString Byte String Dim recvbytes(1024) As Byte Dim i As Integer = clientsocket.receive( _ recvbytes, 0, clientsocket.available, _ SocketFlags.None) Dim datetime As String = Encoding.ASCII.GetString(_ recvbytes, 0, i) 6-1 1. 5-8 5-9 DateTimeServer.exe 2. DOS 6-1\Bin IP 127.0.0.1 localhost DateTimeClient 127.0.0.1 3. C:\6-1\bin>DateTimeClient 127.0.0.1 Receive 21 bytes. 6-23
Current server date/time: 2008/5/10 10:26:46 Press any key to exit. 4. C:\5-8\bin>DateTimeServer DateTime server started at: 127.0.0.1:13 Client: 127.0.0.1:1031 Server: 127.0.0.1:13 To Client: 127.0.0.1:1031: 2008/7/9 10:26:46 6-2 TcpClient DateTime DNS IP TcpClient TcpClient Connect GetStream NetworkStream tcpclient.connect(serverhost, 13) networkstream = tcpclient.getstream() Catch exc As Exception End NetworkStream Read Read Encoding.ASCII.GetString Byte String Dim recvbytes(tcpclient.receivebuffersize) As Byte Dim i As Integer = networkstream.read( _ recvbytes, 0, CInt(tcpClient.ReceiveBufferSize)) Dim datetime As String = Encoding.ASCII.GetString(_ recvbytes, 0, i) 6-24
6 6-2 Client/Server Client/Server [1] Microsoft Developer Network. [2] Stevens W. Richard, UNIX Network Programming, Prentice Hall, 1991. [3] Stevens W. Richard, TCP/IP Illustrated Volume I, Addison-Wesley, 1996. 6-25
6-26