Socket一般用于网络之间的通信,在这里,实现的是服务端与客户端的简单消息通信。
首先是客户端的搭建,一般步骤是先建立Socket绑定本地的IP和端口,并对远端连接进行连接进行监听,这里的监听一般开启后台线程进行循环处理;如果远端有连接到本机的Socket的端口,则获取一个新的Socket对象并重新添加一个线程用于对远端地址进行消息通信(消息的收发),这样,服务端的Socket就简单实现,下面是winForm的具体实现。
一、先建立Socket的服务类SocketServerManager,用于对Socket各种操作的统一管理:
1 public class SocketManager 2 { 3 Socket _socket = null; 4 EndPoint _endPoint = null; 5 bool _isListening = false; 6 int BACKLOG = 10; 7 8 public SocketManager(string ip, int port) 9 { 10 _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 11 IPAddress _ip = IPAddress.Parse(ip); 12 _endPoint = new IPEndPoint(_ip, port); 13 } 14 15 public void Start() 16 { 17 _socket.Bind(_endPoint); //绑定端口 18 _socket.Listen(BACKLOG); //开启监听 19 Thread acceptServer = new Thread(AcceptWork); //开启新线程处理监听 20 acceptServer.IsBackground = true; 21 _isListening = true; 22 acceptServer.Start(); 23 } 24 25 public void AcceptWork() 26 { 27 while (_isListening) 28 { 29 Socket acceptSocket = _socket.Accept(); 30 if (acceptSocket != null) 31 { 32 Thread socketConnectedThread = new Thread(newSocketReceive); 33 socketConnectedThread.IsBackground = true; 34 socketConnectedThread.Start(acceptSocket); 35 } 36 Thread.Sleep(200); 37 } 38 } 39 40 public void newSocketReceive(object obj) 41 { 42 Socket socket = obj as Socket; 43 while (true) 44 { 45 try 46 { 47 if (socket == null) return; 48 //这里向系统投递一个接收信息的请求,并为其指定ReceiveCallBack做为回调函数 49 socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallBack, buffer); 50 } 51 catch (Exception ex) 52 { 53 return; 54 } 55 Thread.Sleep(100); 56 } 57 } 58 59 private void ReceiveCallBack(IAsyncResult ar) 60 { 61 } 62 }