<script type="text/javascript">
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
下面的示例程序创建一个连接到服务器的客户端。该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
同步客户端套接字示例
下面的示例程序创建一个连接到服务器的客户端。该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。
[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.// The name of the// remote device is "host.contoso.com".IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");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;}}同步服务器套接字示例
下面的示例程序创建一个接收来自客户端的连接请求的服务器。该服务器是用同步套接字生成的,因此在等待来自客户端的连接时不挂起服务器应用程序的执行。该应用程序接收来自客户端的字符串,在控制台显示该字符串,然后将该字符串回显到客户端。来自客户端的字符串必须包含字符串“<EOF>”,以发出表示消息结尾的信号。[C#]using System;using System.NET;using System.NET.Sockets;using System.Text;public class SynchronousSocketListener {// Incoming data from the client.public static string data = null;public static void StartListeNing() {// Data buffer for incoming data.byte[] bytes = new Byte[1024];// Establish the local endpoint for the socket.// Dns.GetHostName returns the name of the// host runNing the application.IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());IPAddress ipAddress = ipHostInfo.AddressList[0];IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);// Create a TCP/IP socket.Socket listener = new Socket(AddressFamily.InterNETwork,SocketType.Stream, ProtocolType.Tcp );// Bind the socket to the local endpoint and// listen for incoming connections.try {listener.Bind(localEndPoint);listener.Listen(10);// Start listeNing for connections.while (true) {Console.WriteLine("Waiting for a connection...");// Program is suspended while waiting for an incoming connection.Socket handler = listener.Accept();data = null;// An incoming connection needs to be processed.while (true) {bytes = new byte[1024];int bytesRec = handler.Receive(bytes);data += Encoding.ASCII.GetString(bytes,0,bytesRec);if (data.IndexOf("<EOF>") > -1) {break;}}// Show the data on the console.Console.WriteLine( "Text received : {0}", data);// Echo the data back to the client.byte[] msg = Encoding.ASCII.GetBytes(data);handler.Send(msg);handler.Shutdown(SocketShutdown.Both);handler.Close();}} catch (Exception e) {Console.WriteLine(e.ToString());}Console.WriteLine("/nHit enter to continue...");Console.Read();}public static int Main(String[] args) {StartListeNing();return 0;}}异步客户端套接字示例
下面的示例程序创建一个连接到服务器的客户端。该客户端是用异步套接字生成的,因此在等待服务器返回响应时不挂起客户端应用程序的执行。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。[C#]using System;using System.NET;using System.NET.Sockets;using System.Threading;using System.Text;// State object for receiving data from remote device.public class StateObject {public Socket workSocket = null; // Client socket.public const int BufferSize = 256; // Size of receive buffer.public byte[] buffer = new byte[BufferSize]; // Receive buffer.public StringBuilder sb = new StringBuilder();// Received data string.}public class AsynchronousClient {// The port number for the remote device.private const int port = 11000;// ManualResetEvent instances signal completion.private static ManualResetEvent connectDone =new ManualResetEvent(false);private static ManualResetEvent sendDone =new ManualResetEvent(false);private static ManualResetEvent receiveDone =new ManualResetEvent(false);// The response from the remote device.private static String response = String.Empty;private static void StartClient() {// Connect to a remote device.try {// Establish the remote endpoint for the socket.// "host.contoso.com" is the name of the// remote device.IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");IPAddress ipAddress = ipHostInfo.AddressList[0];IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);// Create a TCP/IP socket.Socket client = new Socket(AddressFamily.InterNETwork,SocketType.Stream, ProtocolType.Tcp);// Connect to the remote endpoint.client.BeginConnect( remoteEP,new AsyncCallback(ConnectCallback), client);connectDone.WaitOne();// Send test data to the remote device.Send(client,"This is a test<EOF>");sendDone.WaitOne();// Receive the response from the remote device.Receive(client);receiveDone.WaitOne();// Write the response to the console.Console.WriteLine("Response received : {0}", response);// Release the socket.client.Shutdown(SocketShutdown.Both);client.Close();} catch (Exception e) {Console.WriteLine(e.ToString());}}private static void ConnectCallback(IAsyncResult ar) {try {// Retrieve the socket from the state object.Socket client = (Socket) ar.AsyncState;// Complete the connection.client.EndConnect(ar);Console.WriteLine("Socket connected to {0}",client.RemoteEndPoint.ToString());// Signal that the connection has been made.connectDone.Set();} catch (Exception e) {Console.WriteLine(e.ToString());}}private static void Receive(Socket client) {try {// Create the state object.StateObject state = new StateObject();state.workSocket = client;// Begin receiving the data from the remote device.client.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,new AsyncCallback(ReceiveCallback), state);} catch (Exception e) {Console.WriteLine(e.ToString());}}private static void ReceiveCallback( IAsyncResult ar ) {try {// Retrieve the state object and the client socket// from the async state object.StateObject state = (StateObject) ar.AsyncState;Socket client = state.workSocket;// Read data from the remote device.