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 服务侦听就启动成功了,正等待客户端连接。

待续......

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

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

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

    本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualRe ...

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

    服务端处理1个客户端的例子 运行结果: (1) while(accept+if(recv)) 情形 执行服务端进程: [root@localhost single_link]# ./server [s ...

  3. 计算属性 vs 侦听属性 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

    https://cn.vuejs.org/v2/guide/computed.html#基础例子 计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属 ...

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

    参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html http://blog.csdn.net/alongken200 ...

  5. vue基础---计算属性和侦听器

    [一]计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> ...

  6. 启动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/ ...

  7. windows 启动关闭Oracle监听和服务

    经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点.    1.开启:     在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后 net start O ...

  8. vue基础——计算属性和侦听器

    计算属性——介绍 模板内的表达式非常便利,但是设计他们的初衷是用于简单计算的.在模板中放入太多的逻辑会让模板太过沉重切难以维护.如下: <div id="example"&g ...

  9. Linux下启动Oracle服务和监听程序步骤

    Linux下启动Oracle服务和监听程序启动和关闭步骤整理如下: 1.安装oracle: 2.创建oracle系统用户: 3./home/oracle下面的.bash_profile添加几个环境变量 ...

随机推荐

  1. HDU4745--区间DP+回文串

    这题的题意为,给你一个环状的字符串,有两只兔子分别从某任意的石头上开始跳跃.一只顺时针跳.一只逆时针跳.两只兔子每一次落脚处石头的质量都相同.兔子要一步一步的跳,且不能跳到之前跳到过的地方.总的来说, ...

  2. Java GC机制中Minor GC/Full GC

    Minor GC Young GC Full GC Major GC https://blog.csdn.net/chenleixing/article/details/46706039 内存划分为 ...

  3. [python]PyPI使用国内源

    PyPI使用国内源 对于默认的pip源的速度太慢,一些国内的pip源,如下: 豆瓣(douban) https://pypi.douban.com/simple 阿里云 http://mirrors. ...

  4. CentOS7.5安装Python3.7报错:configure: error: no acceptable C compiler found in $PATH --Python3

    1.问题解析 报错信息中有这样一条:configure: error: no acceptable C compiler found in $PATH即:配置错误,在$path中找不到可接受的C编译器 ...

  5. node.js调用google翻译api

    源码下载:https://pan.baidu.com/s/1nxoodst 使用:(只支持get) http://39.106.33.56:3001/translate?text=Failure is ...

  6. React文档(十七)非受控组件

    大多数情况下,我们建议使用受控组件(也就是用React的state来控制表单元素的value值)来实现表单.在一个受控组件里,表单数据被React组件处理.另一种方案就是非控制组件,这样的话表单数据就 ...

  7. ie 下date对象

    var t = '2014-02-26T21:18:02.497' var a = t.replace(/(\d{4})-(\d{2})-(\d{2})T(.*)?\.(.*)/, "$1/ ...

  8. 数据结构算法之冒泡排序——Java语言实现

    今天来谈下冒泡排序算法,这次实现由两种形式如下所示: 1.对于长度为N的数据序列,没有加标签限制,针对一开始就是有序的数据序列,仍然需要排序N-1趟来完成排序. 2.对于长度为N的数据序列,加标了签限 ...

  9. 各大型网站架构分析收集-原网址http://blog.csdn.net/lovingprince/article/details/3379710

    1. PlentyOfFish 网站架构学习http://www.dbanotes.net/arch/plentyoffish_arch.html 采取 Windows 技术路线的 Web 2.0 站 ...

  10. windows线程池

    #define _WIN32_DCOM #include <SDKDDKVer.h> #include <direct.h> #include <thr/threads. ...