在.net中采用TcpListener、TcpClient代替 socket实现单线程同步模式
服务器端:
- static void Connect(String server, String message)
- {
- try
- {
- // Create a TcpClient.
- // Note, for this client to work you need to have a TcpServer
- // connected to the same address as specified by the server, port
- // combination.
- Int32 port = 13000;
- TcpClient client = new TcpClient(server, port);
- // Translate the passed message into ASCII and store it as a Byte array.
- Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
- // Get a client stream for reading and writing.
- // Stream stream = client.GetStream();
- NetworkStream stream = client.GetStream();
- // Send the message to the connected TcpServer.
- stream.Write(data, 0, data.Length);
- Console.WriteLine("Sent: {0}", message);
- // Receive the TcpServer.response.
- // Buffer to store the response bytes.
- data = new Byte[256];
- // String to store the response ASCII representation.
- String responseData = String.Empty;
- // Read the first batch of the TcpServer response bytes.
- Int32 bytes = stream.Read(data, 0, data.Length);
- responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
- Console.WriteLine("Received: {0}", responseData);
- // Close everything.
- stream.Close();
- client.Close();
- }
- catch (ArgumentNullException e)
- {
- Console.WriteLine("ArgumentNullException: {0}", e);
- }
- catch (SocketException e)
- {
- Console.WriteLine("SocketException: {0}", e);
- }
- Console.WriteLine("/n Press Enter to continue...");
- Console.Read();
- }
- using System;
- using System.IO;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- class MyTcpListener
- {
- public static void Main()
- {
- TcpListener server=null;
- try
- {
- // Set the TcpListener on port 13000.
- Int32 port = 13000;
- IPAddress localAddr = IPAddress.Parse("127.0.0.1");
- // TcpListener server = new TcpListener(port);
- server = new TcpListener(localAddr, port);
- // Start listening for client requests.
- server.Start();
- // Buffer for reading data
- Byte[] bytes = new Byte[256];
- String data = null;
- // Enter the listening loop.
- while(true)
- {
- Console.Write("Waiting for a connection... ");
- // Perform a blocking call to accept requests.
- // You could also user server.AcceptSocket() here.
- TcpClient client = server.AcceptTcpClient();
- Console.WriteLine("Connected!");
- data = null;
- // Get a stream object for reading and writing
- NetworkStream stream = client.GetStream();
- int i;
- // Loop to receive all the data sent by the client.
- while((i = stream.Read(bytes, 0, bytes.Length))!=0)
- {
- // Translate data bytes to a ASCII string.
- data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
- Console.WriteLine("Received: {0}", data);
- // Process the data sent by the client.
- data = data.ToUpper();
- byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
- // Send back a response.
- stream.Write(msg, 0, msg.Length);
- Console.WriteLine("Sent: {0}", data);
- }
- // Shutdown and end connection
- client.Close();
- }
- }
- catch(SocketException e)
- {
- Console.WriteLine("SocketException: {0}", e);
- }
- finally
- {
- // Stop listening for new clients.
- server.Stop();
- }
- Console.WriteLine("/nHit enter to continue...");
- Console.Read();
- }
}