TCP同步和异步连接_学习笔记

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

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

 

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

 

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对象是要保存起来的,这只是异步的接收请求而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值