所谓同步连接,就是一个服务器与第一个请求建立连接并通信后,第二个请求将会被阻塞。

所谓异步连接,就是一个服务器可以同时响应多个请求。

同步:服务器与接受请求的代码:

TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);

TcpClient tc =server.AcceptTcpClient();

异步:

BeginAcceptTcpClient()

EndAcceptTcpClient()

第一种模式:阻塞模式(同步)

TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);

while(true)

{

TcpClient tc =server.AcceptTcpClient();

//  do ........................

}

来一个连接服务端端就响应了,然执行操作,如果操作没完成再来一个客户端请求就阻塞你,直到第一个请求完成操作。

总结特点:这种模式简单易行,适合客户端请求次数比较少场景。比如一下来了1000个请求,第一个去执行了,剩下的999个被阻塞。

第二种模式:多线程+阻塞(异步) 。。。 其实异步感觉就是多线程,涉及到临界资源的互斥问题。

TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);

while(true)

{

TcpClient tc =server.AcceptTcpClient();

//接收到客户端请求之后 就起一个线程 负责这个客户端TCP与服务端的通讯

Thread  Th=new  Thread(F);

Th.start();//有参数加参数没参数不加

}

void  F( object  oo)

{

//和客户端进行通讯

}

第三种模式:非阻塞模式(异步)

就不在用AcceptTcpClient()这种阻塞方式来接收请求。就是来一个请求马上接收。

通常用这两个方法组合使用

TcpListene server = newTcpListener(IPAddress.Parse("127.0.0.1"), port);

server.Start();

server.BeginAcceptTcpClient(newAsyncCallback(AcceptClient), server);

voidAcceptClient(IAsyncResult ar)
       {
           TcpListener server = (TcpListener)ar.AsyncState;
           TcpClient client = server.EndAcceptTcpClient(ar);
       }

当执行BeginAcceptTcpClient时候编译器就会在线程池中创建一个线程监听连接请求,如果有请求就会自动调用委托的方法(这里的AcceptClient)来完成一个TcpClient的实例,再来一个客户端请求,线程池又新建一个线程去实例一个TcpClient对象,当然了如果想做长连接的多客户端与服务端的通讯时候,每一个TcpClient对象是要保存起来的,这只是异步的接收请求而已。

TCP同步和异步连接_学习笔记相关推荐

  1. DHCP服务_学习笔记

    DHCP服务_学习笔记 DHCP(Dynamic Host Configuration Protocol):动态主机配置协议 Lease:租约    续租时间需要是租期时间的一半 UDP协议: Ser ...

  2. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  3. 《TCP/IP详解卷一》学习笔记

    <TCP/IP详解卷一>学习笔记 第1章 概述 第3章 IP:网际协议 第6章 ICMP:internet控制报文协议 第7/8章 Ping/Traceroute程序 第9/10章 IP路 ...

  4. 图论01.最短路专题_学习笔记+模板

    图论01.最短路专题_学习笔记+模板 一.定义与性质 ● 需要的前导知识点 路径 最短路 有向图中的最短路.无向图中的最短路 单源最短路.每对结点之间的最短路 ● 最短路的性质 对于边权为正的图,任意 ...

  5. 微信小游戏帧同步demo(minigame-lockstep-demo)学习笔记

    微信小游戏帧同步demo(minigame-lockstep-demo)学习笔记 框架 pixi.js 游戏配置game.json 游戏服务gameserver.js 帧同步 操作流程 1.操作发送到 ...

  6. comsol与matlab连接使用学习笔记 1 基础设置

    comsol与matlab连接使用学习笔记 1 基础设置 前言 1.安装 COMSOL livlink for Matlab 2.首次运行 前言 以前从来没有用过comsol livelink for ...

  7. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  8. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  9. c++ qt工作量和移动端相比_学习笔记 --- QT

    0.前序 别问,问就是选修... 那毕竟3dMax动画那边结课了,我怎么就不能再发一篇笔记(极其嚣张) QT其实会去好好学的,虽然最近为了选修结课又得恶补一波 不过以后给策划造编辑器是要用的,这篇笔记 ...

最新文章

  1. android碎片按钮,Android 碎片(Fragment)
  2. 二进制安装部署 4 kubernetes集群---超详细教程
  3. 在SqlServer存储过程中使用Cursor(游标)操作记录
  4. PHP常用字符串函数小结
  5. BI 界震动 - Power BI Premium 个人版只要每月 120 元
  6. [Ajax] jQuery中的Ajax -- 04-异步提交表单
  7. 02 button的练习
  8. 给汽车轮胎内充满水而不是气,行不行?
  9. Docker之使用Dockerfile创建定制化镜像(四)--技术流ken
  10. linux的fseek函数
  11. 人工智能之产生式系统(c++实现)
  12. shiro权限架作战
  13. oracle的order by排序优化,oracle order by 排序优化
  14. [渝粤教育] 广东-国家-开放大学 21秋期末考试组织行为学10068k2
  15. 不仅会编程还要会英语(博主英语小笔记)1.1名词
  16. 访问文件或图片报403的处理方式
  17. 推动和规范编程教育纳入中小学相关课程加强师资建设(2020)
  18. 米签---个人中心页面功能(uniapp)
  19. canvas之-------水滴扩散特效
  20. 转载:【推荐】云服务器推荐

热门文章

  1. python学习-条件语句
  2. 片偏移字段的值怎么算_搞懂钢丝网片计算原理,怎么算都不怕出错!
  3. java中堆与栈的区别_java中堆和栈的区别分析
  4. linux httppost 请求接口参数被截断_记一次小程序图片安全接口和CountDownLatch的使用...
  5. 40+张最全Linux/C/C++思维导图,收藏!
  6. 矫情这一次,感谢这几个人。
  7. c php base64,C语言实现base64编码,base64解码
  8. python大牛自学心得_自学Python编程的第十天(希望有IT大牛看见的指点小弟我,万分感谢)---------来自苦逼的转行人...
  9. linux添加文件后无法启动,linux安装后grub无法启动
  10. java 多线程池_Java项目中,线程池中线程数量太大会有什么影响?