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     }
public class SockeServertManager

相关文章:

  • 2021-11-30
  • 2022-12-23
  • 2022-12-23
  • 2022-03-02
  • 2021-12-15
  • 2021-09-16
猜你喜欢
  • 2021-06-24
  • 2021-10-30
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
相关资源
相似解决方案