天天看点

SOCKET Communication writen in C# (2) TcpListener 和TcpClient 同步阻塞模式

TcpListener 和TcpClient 只是提供TCP连接的网络服务:

以网络NetWorkStream流的方式来进行数据的通讯.直接对networkstream进行read ,write.

操作默认是同步阻塞的方式 blocking synchronous mode.,但对象类内部都提供了相应的异步非阻塞的方式来进行网络流的操作.

同步阻塞操作:

 AcceptSocket or AcceptTcpClient 

Connect,Read,Write

异步非阻塞

BeginAcceptSocket

BeginAcceptTcpClient

EndAcceptSocket

EndAcceptTcpClient

BeginConnect

EndConnect

BeginRead

BeginWrite

EndRead

EndWrite

TcpListener :

  调用start方法后,开始接收客户端的请求,这时候,tcplistener会将进入的请求连接进行排队处理直到前面的处理连接关闭或是队列达到最大为止.

   AcceptSocket or AcceptTcpClient获得在请求连接队列里的下一个客户端请求连接,重要的是这两个方法都是阻塞的block.

   所以如果你想避免进入阻塞等待,可以先调用pending方法来判断是否在请求连接队列里是否存在等待的请求连接.

without calling connect  method ,it's ok!

The Stop method does not close any accepted connections. You are responsible for closing these separately.

  NetworkStream的Read,必须client的连接还保存着,否则抛出异常消息

获得Stream的方法:

      1. NetworkStream DataRiver = client.GetStream();

       2. NetworkStream DataRiver = new NetworkStream(socket) //必须以AcceptSocket 获得SOCKET对象作为参数,而不是TcpClient对象

TcpClient:

你可以有两种方法连接到被侦听的端口host上

1.Create a TcpClient and call one of the three available Connect methods(正常方式)

2.Create a TcpClient using the host name and port number of the remote host. This constructor will automatically attempt a connection(使用name和port构造tcpclient),just directly call GetStream() then get  Communication Stream

同样默认是同步阻塞的 in synchronous blocking mode

继续阅读