C#网络编程之TCP(七)

一、短连接与长连接

  短连接与长连接,是网络系统的设计方法。短与长,并不是严格定义,还有一些不短不长的连接方式。

  短连接:存在时间较短的连接,如http。

  长连接:存在时间较长的连接,如ftp,telnet。

二、短连接

  短连接的特点:

  1.交互时间比较短

  2.完成之后立即关闭连接

  3.下次需要的时候再发起新的连接

  

  具体的实现方式和第四节的类似

  客户端和服务端都要按短连接方式实现

  客户端:… connect … send … receive… close

  服务关:…创建线程 … receive… send … close

  每次交互完了,连接随即关闭,所以称为“短连接”

三、长连接

  长连接方式:一次连接,多次使用,简单的来说就是用完了不关,下次交互还用这个连接。

while (true)
{
    // 监听客户端发起连接
    Socket conn = socket.Accept();

    // 处理此连接的请求

    // 关闭此连接
    // conn.Close();
}

  观察示例代码可知,我们注释掉了conn.Close()方法,在处理完请求后,继续进入while循环处理下次请求。

  思考一下,长连接方式下,什么时候关闭连接呢?客户端长时间没有发送消息,服务器还有必要一直保持连接吗?

四、反空闲和心跳

   1.空闲

  (1)什么叫空闲状态?

  一个连接连上来之后,什么请求也不发,称为空闲状态。

  (2)空闲有什么问题?

  空闲本不是问题,但它在服务端占用了一个线程和一个连接。

  (3)什么原因会导致空闲状态?

  客户端确实没有动作或网络异外中断。

  2.反空闲

  就是自动关闭空闲的连接。

  解决办法:在服务端设置接收超时时间 比如:规定1分钟内没有动静,则为空闲。服务器设置接收超时时间为1分钟即可。一旦超时,则关闭连接。

   conn.ReceiveTimeout = 1000 * 60; conn.SendTimeout = 1000 * 60; 

  3.心跳机制 

  在服务器使用反空闲机制后,客户端如果想要维持一个长连接,就必须添加心跳机制。

  设计思路:创建一个线程,定时向服务器发送一个消息包,表明自己的存在。

  

posted @ 2023-01-02 21:14  Zeng。  阅读(583)  评论(0编辑  收藏  举报