摘自msdn
客户端:
- 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;
- }
- }
服务器端:
- 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.
- //启动一个网络进程守候 程序,以后送往该IP以及该端口的数据 全部由该进程守候程序处理
- try {
- listener.Bind(localEndPoint);
- listener.Listen(10);
- // Start listening for connections.
- //每一次处理一个tcp连接。
- 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;
- }
- }
- 在这种模式中如果socket中,如果绑定的IP以及端口没有“待处理”的数据,会使处理函数处于等待状态而无法返回。