Socket基础之-启动异步服务侦听
Socket网络编程第一篇:
本文主要是以代码为主。
.NET技术交流群 199281001 .欢迎加入

1 //负责监听的套接字
private Socket socketServer;
//通知一个或多个正在等待的线程已发生事件。
ManualResetEvent manager = new ManualResetEvent(false);
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 //设置监听队列的长度
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;
//将事件状态设置为终止状态,允许一个或多个等待线程继续。
manager.Set();
7 //开始接受消息.......
8 }

1 private void ShowMsg(string msg)
2 {
3 //显示消息
4 txtConneMsg.AppendText("\r\n" + DateTime.Now + "\r\n\r\n" + msg + "\r\n");
5 }

ok 服务侦听就启动成功了,正等待客户端连接。
待续......
Socket基础之-启动异步服务侦听的更多相关文章
- C# Socket基础(一)之启动异步服务监听
本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualRe ...
- socket基础实例(一个服务端对应一个客户端情形)
服务端处理1个客户端的例子 运行结果: (1) while(accept+if(recv)) 情形 执行服务端进程: [root@localhost single_link]# ./server [s ...
- 计算属性 vs 侦听属性 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的
https://cn.vuejs.org/v2/guide/computed.html#基础例子 计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属 ...
- 用php模拟做服务端侦听端口
参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html http://blog.csdn.net/alongken200 ...
- vue基础---计算属性和侦听器
[一]计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> ...
- 启动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/ ...
- windows 启动关闭Oracle监听和服务
经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点. 1.开启: 在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后 net start O ...
- vue基础——计算属性和侦听器
计算属性——介绍 模板内的表达式非常便利,但是设计他们的初衷是用于简单计算的.在模板中放入太多的逻辑会让模板太过沉重切难以维护.如下: <div id="example"&g ...
- Linux下启动Oracle服务和监听程序步骤
Linux下启动Oracle服务和监听程序启动和关闭步骤整理如下: 1.安装oracle: 2.创建oracle系统用户: 3./home/oracle下面的.bash_profile添加几个环境变量 ...
随机推荐
- EmailHelper
注:个人邮箱发送时需要将邮箱密码设置为邮件授权码 邮件发送帮助类一: public class EmailHelper { /// <summary> /// 发送邮件 /// </ ...
- webview元素定位
genymotion 模拟器:android 5.0.0 python 2.7 appium 1.4.16.1 1.app原生元素定位(常用) driver.find_element_by_id(“ ...
- SpringBoot mybatis配置
首先pom.xml <!-- mybatis 配置 --> <dependency> <groupId>org.mybatis.spring.boot</gr ...
- Random库 --Python3
随机数是随机试验的结果,是计算机通过随即种子根据一定算法计算出来的,随机种子通常可以由系统时钟产生.下面是random库中基本方法: 1.random():产生一个0到1之间的随机浮点数:0<= ...
- grpc(二)记一次grpc debug--io.grpc.StatusRuntimeException: UNKNOWN
1.起初是dingding一直报错: instance:服务器名 err:GrpcClient#placeOrder: io.grpc.StatusRuntimeException: UNKNOWN ...
- 第K个幸运数字(4、7)
题目:4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字,前几个幸运数字为:4,7,44,47,74,77,444,447······输出第K个数字. 思路是:将 ...
- Vue开发中遇到的问题及解决方案
问题一:npm run dev的时候控制台报错Vue packages version mismatch,如下面 可是检查package.json文件里vue和vue-template-compile ...
- angular学习2
1.为了在angular里面使用bootstrap,可以如下操作 (1)停止正在运行的终端指令:ctrl+c (2)在终端里面输入:npm install bootstrap --save (3)在V ...
- vim 插件 -- omnicppcomplete
omnicppcomplete 插件是基于ctags来实现补全的.所以,要先安装好ctags才可以使用. 下载 https://www.vim.org/scripts/script.php?scrip ...
- python--jianja2
一:渲染模版 要渲染一个模板,通过render_template方法即可. @app.route('/about/')def about():return render_template('about ...