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. Ubuntu 14.04 更新 setuptools 至 19.2 版本

    参考: Error: "No module named _markerlib" when installing some packages on virtualenv Ubuntu ...

  2. 1_bytes和str

    数据运算全跳过,语言都一样,格式差异 bytes/str的区别    Python3不会以任意隐式的方式混用bytes和str,不能拼接字符串和字节包也无法在字节包里搜索字符串(反之亦然)    二进 ...

  3. jquery将表单序列化

    在工作中经常要将表单数据通过ajax提交,所以需要将表单序列化为json对象. 已经有大神提供了,以前一直百度,现在决定抄过来收藏一下,方便以后自己用,尊重原创,文章转载自:http://www.cn ...

  4. grade配置添加java库导致报 java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMerger

    原因是导入的第三方库中也引入了项目中存在的相同名称的库,导致产生冲突

  5. [数据结构] 大纲 - Stan Zhang 数据结构速通教程

    * 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任. 2019年4月8日 P1.1 链表 Link:https://www.cnblogs.com/yosql473/p/10727471 ...

  6. Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet - 我爱机器学习

    http://www.cnblogs.com/52machinelearning/p/5821591.html

  7. linux软件管理之概述

    软件包管理 ====================================================================================安装/查询/卸载 一 ...

  8. Confluence 6 示例 - https://confluence.atlassian.com/

    这里是有关存储空间和内存使用的情况,数据更新于 2013年04月: 数据库大小 2827 MB Home 目录占用空间大小 116 GB 平均内存消耗 1.9 GB 选择实例的数据库表格 数据(Dat ...

  9. 广工十四届校赛 count 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意:求,直接矩阵快速幂得f(n)即可 构造矩阵如下: n^3是肯定得变换的,用二项式展开来一点 ...

  10. OpenRASP安装使用教程

    一.说明 1.1 RASP和WAF的区别 WAF,Web Application Firewall,应用防火墙.其原理是拦截原始http数据包,然后使用规则对数据包进行匹配扫描,如果没有规则匹配上那就 ...