同步客户端套接字示例
下面的示例程序创建一个连接到服务器的客户端。该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。
- 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;
- }
- }
同步服务器套接字示例 下面的示例程序创建一个接收来自客户端的连接请求的服务器。该服务器是用同步套接字生成的,
因此在等待来自客户端的连接时挂起服务器应用程序的执行。该应用程序接收来自客户端的字符串,
在控制台显示该字符串,然后将该字符串回显到客户端。来自客户端的字符串必须包含字符串“<EOF>”,
以发出表示消息结尾的信号。
- 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("/nPress ENTER to continue...");
- Console.Read();
- }
- public static int Main(String[] args) {
- StartListening();
- return 0;
- }
- }