Socket基础之-启动异步服务侦听

本文主要是以代码为主。.NET技术交流群 199281001 .欢迎加入。

//通知一个或多个正在等待的线程已发生事件。
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基础(二) 之 服务器异步接收消息

作者:gaobing

出处: http://gaobing.cnblogs.com

提示:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Socket基础之-启动异步服务侦听

时间: 2025-01-01 15:28:43

Socket基础之-启动异步服务侦听的相关文章

C# Socket基础(一)之启动异步服务监听

本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualResetEvent(false); 1 //负责监听的套接字 private Socket socketServer; 2 /// <summary> 3 /// 启动服务 4 /// </summary> 5 private void CreateSocketService() 6 {

socket基础实例(一个服务端对应一个客户端情形)

服务端处理1个客户端的例子 运行结果: 执行服务端进程: [[email protected] single_link]# ./server [server]: begin [server]: loop...... [server]: client[127.0.0.138528] is connected [server]: recv from client[127.0.0.1:38528]: data=12345, len=1024 [server]: send to client[127.0

C# Socket基础(二) 之 服务器异步接收消息

ManualResetEvent reviceManager = new ManualResetEvent(false); 1 public void args_Completed(object sender, SocketAsyncEventArgs e) 2 { 3 //监听完成客户端的请求,一但监听到返回新的套接字 4 var clientSocket = e.AcceptSocket; 5 //启动线程获取客户端发来的消息 6 if (clientSocket == null) retu

C# Socket基础(四)之客户端向服务器发消息

private Socket socketClient;//客户端套接字,关于实例化请参考C# Socket基础(三)之客户端连接服务器和接收消息 客户端发送消息 1 /// <summary> 2 /// 发送数据到服务端 3 /// </summary> 4 private void Send() 5 { 6 if (socketClient == null) 7 { 8 9 ShowMsg("服务器未启动!"); 10 return; 11 } 12 by

用php模拟做服务端侦听端口

参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html http://blog.csdn.net/alongken2005/article/details/8056910 socket_accept()是服务端接受客户端请求,一旦有一个客户端链接上来的话,则这个函数会返回一个新的socket资源,这个资源是与客户端通信的资源. socket_accept()是阻塞的,会一直卡在那里. 发现情况:一旦客户端断开链接了,

C# socket异步 服务端

转自:  http://blog.csdn.net/qq_20282263/article/details/54310737 1 private Dictionary<string, Session> SessionPool = new Dictionary<string, Session>(); 2 private Dictionary<string, string> MsgPool = new Dictionary<string, string>();

启动Mysql服务提示Can’t connect to local MySQL server through socket的解决方法

启动Mysql服务常会提示下面错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 这是由于修改mysql服务的了socket文件mysql.sock位置,而导致无法通过mysql socket文件连接到mysql服务引起的,具体解决办法如下: 1.查看mysql服务的socket文件位置:mysql socket文件的位置是在/etc/my.c

windows 启动关闭Oracle监听和服务 (转载)

经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点.   1.开启:     在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后 net start OracleServiceORCL.2 关闭     在运行中输入cmd,进入控制台,lsnrctl stop回车,提示启动监听成功后 net stop OracleServiceORCL.这样还是不太方便.     在桌面右键,新建一个记事本,输入 lsnrctl start net start Or

windows 启动关闭Oracle监听和服务

经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点.    1.开启:     在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后 net start OracleServiceORCL. 2 关闭     在运行中输入cmd,进入控制台,lsnrctl stop回车,提示启动监听成功后 net stop OracleServiceORCL. 这样还是不太方便.     在桌面右键,新建一个记事本,输入 lsnrctl start net start