CODE FOR VB
Imports System Imports System.Net Imports System.Net.Sockets Imports System.Text Public Class SynchronousSocketClient Public Shared Sub Main() ' Data buffer for incoming data. Dim bytes(1024) As Byte ' Connect to a remote device. ' Establish the remote endpoint for the socket. ' This example uses port 11000 on the local computer. Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName()) Dim ipAddress As IPAddress = ipHostInfo.AddressList(0) Dim remoteEP As New IPEndPoint(ipAddress, 11000) ' Create a TCP/IP socket. Dim sender As New Socket(AddressFamily.InterNetwork, _ SocketType.Stream, ProtocolType.Tcp) ' Connect the socket to the remote endpoint. sender.Connect(remoteEP) Console.WriteLine("Socket connected to {0}", _ sender.RemoteEndPoint.ToString()) ' Encode the data string into a byte array. Dim msg As Byte() = _ Encoding.ASCII.GetBytes("This is a test<EOF>") ' Send the data through the socket. Dim bytesSent As Integer = sender.Send(msg) ' Receive the response from the remote device. Dim bytesRec As Integer = sender.Receive(bytes) Console.WriteLine("Echoed test = {0}", _ Encoding.ASCII.GetString(bytes, 0, bytesRec)) ' Release the socket. sender.Shutdown(SocketShutdown.Both) sender.Close() End Sub End Class 'SynchronousSocketClient
CODE FOR C#
using System; using System.Net; using System.Net.Sockets; using System.Text; public class SynchronousSocketClient { public static void StartClient() { // Data buffer for incoming data. byte[] bytes = new byte[1024]; // Connect to a remote device. try { // Establish the remote endpoint for the socket. // This example uses port 11000 on the local computer. IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAddress,11000); // Create a TCP/IP socket. Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); // Connect the socket to the remote endpoint. Catch any errors. try { sender.Connect(remoteEP); Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString()); // Encode the data string into a byte array. byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>"); // Send the data through the socket. int bytesSent = sender.Send(msg); // Receive the response from the remote device. int bytesRec = sender.Receive(bytes); Console.WriteLine("Echoed test = {0}", Encoding.ASCII.GetString(bytes,0,bytesRec)); // Release the socket. sender.Shutdown(SocketShutdown.Both); sender.Close(); } catch (ArgumentNullException ane) { Console.WriteLine("ArgumentNullException : {0}",ane.ToString()); } catch (SocketException se) { Console.WriteLine("SocketException : {0}",se.ToString()); } catch (Exception e) { Console.WriteLine("Unexpected exception : {0}", e.ToString()); } } catch (Exception e) { Console.WriteLine( e.ToString()); } } public static int Main(String[] args) { StartClient(); return 0; } }
A synchronous client socket suspends the application program while the network operation completes. Synchronous sockets are not suitable for applications that make heavy use of the network for their operation, but they can enable simple access to network services for other applications.
To send data, pass a byte array to one of the Socket class's send-data methods (Send and SendTo). The following example encodes a string into a byte array buffer using the Encoding.ASCII property and then transmits the buffer to the network device using the Send method. The Send method returns the number of bytes sent to the network device.
Code For VB
Dim msg As Byte() = _ System.Text.Encoding.ASCII.GetBytes("This is a test<EOF>") Dim bytesSent As Integer = s.Send(msg)
Code For C#
byte[] msg = System.Text.Encoding.ASCII.GetBytes("This is a test<EOF>"); int bytesSent = s.Send(msg);
The Send method removes the bytes from the buffer and queues them with the network interface to be sent to the network device. The network interface might not send the data immediately, but it will send it eventually, as long as the connection is closed normally with the Shutdown method.
To receive data from a network device, pass a buffer to one of the Socket class's receive-data methods (Receive and ReceiveFrom). Synchronous sockets will suspend the application until bytes are received from the network or until the socket is closed. The following example receives data from the network and then displays it on the console. The example assumes that the data coming from the network is ASCII-encoded text. The Receive method returns the number of bytes received from the network.
Code For VB
Dim bytes(1024) As Byte Dim bytesRec = s.Receive(bytes) Console.WriteLine("Echoed text = {0}", _ System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec))
Code For C#
byte[] bytes = new byte[1024]; int bytesRec = s.Receive(bytes); Console.WriteLine("Echoed text = {0}", System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec));
When the socket is no longer needed, you need to release it by calling the Shutdown method and then calling the Close method. The following example releases a Socket. The SocketShutdown enumeration defines constants that indicate whether the socket should be closed for sending, for receiving, or for both.
Code For VB
s.Shutdown(SocketShutdown.Both) s.Close()
Code For C#
s.Shutdown(SocketShutdown.Both); s.Close();
Download project and demo here
No comments:
Post a Comment