标签:style blog http color 使用 strong
//通知一个或多个正在等待的线程已发生事件。 ManualResetEvent manager = new ManualResetEvent(false);
1 //负责监听的套接字
private Socket socketServer; 2 /// <summary> 3 /// 启动服务 4 /// </summary> 5 private void CreateSocketService() 6 { 7 try 8 { 9 //获取IP 10 var address = IPAddress.Parse(txtIP.Text.Trim()); 11 //创建一个包含ip port 的网络节点对象 12 var ipPoint = new IPEndPoint(address, Convert.ToInt32(txtPort.Text.Trim())); 13 //创建一个套接字socket,参数(IP4寻址协议,流式连接,使用TCP协议传输数据) 14 socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 15 //将负责监听的套接字绑定到唯一的IP和端口上 16 socketServer.Bind(ipPoint); 17 //设置监听队列的长度,同时100个队列 18 socketServer.Listen(100); 19 //线程开始监听客户端的请求 20 threadService = new Thread(StartSocketService); 21 //设置线程为后台线程 22 threadService.IsBackground = true; 23 //启动线程 24 threadService.Start(); 25 //显示消息 26 ShowMsg("服务器监听开启成功!"); 27 28 29 } 30 catch (Exception e) 31 { 32
33 ShowMsg(e.Message); 34 } 35 }
1 /// <summary> 2 /// 启动服务监听 3 /// </summary> 4 private void StartSocketService() 5 { 6 while (true) 7 { 8 try 9 {
//将事件状态设置为非终止状态,导致线程阻止 10 manager.Reset(); 11 //开始监听客户端的连接请求 12 var args = new SocketAsyncEventArgs(); 13 args.Completed += args_Completed; 14 socketServer.AcceptAsync(args);
//阻止当前线程,直到当前 WaitHandle 收到信号。 15 manager.WaitOne(); 16 } 17 catch (Exception ex) 18 { 19 20 ShowMsg(ex.Message); 21 break; 22 } 23 } 24 }
1 void args_Completed(object sender, SocketAsyncEventArgs e) 2 { 3 //监听完成客户端的请求,一但监听到返回新的套接字 4 var clientSocket = e.AcceptSocket; 5 //启动线程获取客户端发来的消息 6 if (clientSocket == null) return;
//开始接受消息.......
7 //该函数未写完,第二篇补全
8 }
1 void ShowMsg(string message) 2 { 3 //显示消息 4 txtConneMsg.AppendText("\r\n" + DateTime.Now + "\r\n\r\n" + message + "\r\n"); 5 }
ok 服务监听就启动成功了,正等待客户端连接。
待续。下一篇:Socket基础(二) 之 服务器异步接收消息
Socket基础之-启动异步服务侦听,布布扣,bubuko.com
标签:style blog http color 使用 strong
原文地址:http://www.cnblogs.com/gaobing/p/3860127.html