http://www.cnblogs.com/bigwalnut/articles/2129070.html

TCP/IP通信程序设计的丰富多样性
刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程
序,据此一些人可能会认为TCP/IP编程很简单。其实不然,
TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在
通信方式和报文格式的多样性上。
一。通信方式
主要有以下三大类:
(一)SERVER/CLIENT方式
1.一个Client方连接一个Server方,或称点对点(peer to peer):
2.多个Client方连接一个Server方,这也是通常的并发服务器方式。
3.一个Client方连接多个Server方,这种方式很少见,主要
用于一个客户向多个服务器发送请求情况。
(二)连接方式
1.长连接
Client方与Server方先建立通讯连接,连接建立后不断开,
然后再进行报文发送和接收。这种方式下由于通讯连接一直
存在,可以用下面命令查看连接是否建立:
netstat –f inet|grep 端口号(如5678)。
此种方式常用于点对点通讯。
2.短连接
Client方与Server每进行一次报文收发交易时才进行通讯连
接,交易完毕后立即断开连接。此种方式常用于一点对多点
通讯,比如多个Client连接一个Server.
(三)发送接收方式
1.异步
报文发送和接收是分开的,相互独立的,互不影响。这种方
式又分两种情况:
(1)异步双工:接收和发送在同一个程序中,有两个不同的
子进程分别负责发送和接收
(2)异步单工:接收和发送是用两个不同的程序来完成。
2.同步
报文发送和接收是同步进行,既报文发送后等待接收返回报文。
同步方式一般需要考虑超时问题,即报文发上去后不能无限等
待,需要设定超时时间,超过该时间发送方不再等待读返回报
文,直接通知超时返回。
实际通信方式是这三类通信方式的组合。比如一般书上提供的
TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的
组合是基本不用的,比较常用的有价值的组合是以下几种:
同步短连接Server/Client
同步长连接Server/Client
异步短连接Server/Client
异步长连接双工Server/Client
异步长连接单工Server/Client
其中异步长连接双工是最为复杂的一种通信方式,有时候经
常会出现在不同银行或不同城市之间的两套系统之间的通信。
比如金卡工程。由于这几种通信方式比较固定,所以可以预
先编制这几种通信方式的模板程序。
二.报文格式
通信报文格式多样性更多,相应地就必须设计对应的读写报文的接
收和发送报文函数。
(一)阻塞与非阻塞方式 
1.非阻塞方式
读函数不停地进行读动作,如果没有报文接收到,等待一段时间后
超时返回,这种情况一般需要指定超时时间。
2.阻塞方式
如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。
(二)循环读写方式
1.一次直接读写报文
在一次接收或发送报文动作中一次性不加分别地全部读取或全部
发送报文字节。
2.不指定长度循环读写
这一般发生在短连接进程中,受网络路由等限制,一次较长的报
文可能在网络传输过程中被分解成了好几个包。一次读取可能不
能全部读完一次报文,这就需要循环读报文,直到读完为止。
3.带长度报文头循环读写
这种情况一般是在长连接进程中,由于在长连接中没有条件能够
判断循环读写什么时候结束,所以必须要加长度报文头。读函数
先是读取报文头的长度,再根据这个长度去读报文.实际情况中,
报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须
转换成ASCII,常见的报文头码制有:
(1)n个字节的ASCII码
(2)n个字节的BCD码
(3)n个字节的网络整型码
以上是几种比较典型的读写报文方式,可以与通信方式模板一起
预先提供一些典型的API读写函数。当然在实际问题中,可能还
必须编写与对方报文格式配套的读写API.
在实际情况中,往往需要把我们自己的系统与别人的系统进行连接,
有了以上模板与API,可以说连接任何方式的通信程序都不存在问题。

一、长连接与短连接:

长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。
这种方式下由于通讯连接一直存在。此种方式常用于P2P通信。
短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。
此方式常用于一点对多点通讯。C/S通信。

二、长连接与短连接的操作过程:

短连接的操作步骤是:
建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接
长连接的操作步骤是:
建立连接——数据传输...(保持连接)...数据传输——关闭连接

三、长连接与短连接的使用时机:

长连接:短连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。
每个TCP连接的建立都需要三次握手,每个TCP连接的断开要四次握手。
如果每次操作都要建立连接然后再操作的话处理速度会降低,所以每次操作
下次操作时直接发送数据就可以了,不用再建立TCP连接。例如:数据库的连接用长连接,
如果用短连接频繁的通信会造成socket错误,频繁的socket创建也是对资源的浪费。
短连接:web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源。
像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。试想如果都用长连接,
而且同时用成千上万的用户,每个用户都占有一个连接的话,可想而知服务器的压力有多大。
所以并发量大,但是每个用户又不需频繁操作的情况下需要短连接。
总之:长连接和短连接的选择要视需求而定。

四、发送接收方式:

1、异步:报文发送和接收是分开的,相互独立,互不影响的。这种方式又分两种情况:
异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接送。
异步单工:接送和发送使用两个不同的程序来完成。
2、同步:报文发送和接收是同步进行,即报文发送后等待接送返回报文。同步方式
一般需要考虑超时问题,试想我们发送报文以后也不能无限等待啊,所以我们要设定一个等待
时候。超过等待时间发送方不再等待读返回报文。直接通知超时返回。

五、报文格式:

通信报文格式多样性更多,相应地就必须设计对应的读写报文的接 收和发送报文函数。

阻塞与非阻塞方式

1、非阻塞方式:读函数不停的进行读动作,如果没有报文接收到,等待一段时间后超时返回,
这种情况一般需要指定超时时间。
2、阻塞方式:如果没有接收到报文,则读函数一直处于等待状态,知道报文到达。

循环读写方式

1、一次直接读写报文:在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。
2、不指定长度循环读写:这一版发生在短连接进程中,受网络路由等限制,一次较长的报文可能
在网络传输过程中被分解成很多个包,一次读取可能不能全部读完一次报文,这就需要循环读取报文,
知道读完为止。
3、带长度报文头循环读写:这种情况一般在长连接中,由于在长连接中没有条件能够判断循环读写什么时候结束。
必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文,实际情况中,报头码制格式还经常不一样,
如果是非ASCII的报文头,还必须转换成ASCII常见的报文头编制有:
1、n个字节的ASCII码。
2、n个字节的BCD码。
3、n个字节的网络整型码。

以上是几种比较典型的读写报文方式,可以与通信方式模板一起 预先提供一些典型的API读写函数。

当然在实际问题中,可能还必须编写与对方报文格式配套的读写API. 在实际情况中,往往需要

把我们自己的系统与别人的系统进行连接, 有了以上模板与API,可以说连接任何方式的通信程序

都不存在问题。

转载于:https://www.cnblogs.com/fengye87626/p/3777824.html

TCP/IP长连接和短连接相关推荐

  1. TCP/IP系列——长连接与短连接的区别

    1 什么是长连接和短连接 三次握手和四次挥手 TCP区别于UDP最重要的特点是TCP必须建立在可靠的连接之上,连接的建立和释放就是握手和挥手的过程. 三次握手为连接的建立过程,握手失败则连接建立失败. ...

  2. TCP长连接和短连接

    2019独角兽企业重金招聘Python工程师标准>>> 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操 ...

  3. [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接

    原文链接 一.HTTP协议和TCP协议 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题, ...

  4. 分析 HTTP,TCP 的长连接和短连接以及 sock

    作者:zhoulujun 链接:https://www.zhoulujun.cn/html/webfront/SGML/web/2015_1016_317.html 1 HTTP 协议与 TCP/IP ...

  5. TCP长连接与短连接的区别(转)

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  6. android socket 长连接_TCP/IP,http,socket,长连接,短连接

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家 下一篇:这200G的Java实战资料是我师傅当年教 ...

  7. tcp、http协议的长连接和短连接

    转载:http://www.cnblogs.com/onlysun/p/4520553.html 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当 ...

  8. 网络:tcp长连接与短连接

    当网络通信采用tcp协议时,在真正的读写操作之前,sever与client之间必须建立一个连接,当读写操作完成之后,对方不再需要这个连接时他们可以释放这个链接,连接的连接需要三次握手,释放需要四次握手 ...

  9. TCP长连接与短连接、心跳机制

    转自: 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是 ...

  10. TCP的长连接与短连接

    转自:https://blog.csdn.net/weixin_39850699/article/details/109903631 1 前言 可能很多 Java 程序员对 TCP 的理解只有一个三次 ...

最新文章

  1. 北京计算机学院 肖战,Shuai Li
  2. PEP8 Python 编码规范整理
  3. Matlab吸附等温线怎么拟合,吸附等温线线模型拟合
  4. java实参将数据传递给形参的两种形式
  5. 安卓教程:提取APK程序里图片资源的方法
  6. mysql 设置utf8mb4_mysql配置utf8_mb4
  7. 用户领域 API 监控和代码注入检测
  8. 全球超级计算机500强 中国独占两个第一
  9. paip 常用汉字形声字大全3500字
  10. 远程清卡失败服务器内部错误,​航天信息远程清卡失败怎么处理
  11. 模板匹配 解决模板旋转以及重复检测问题
  12. scau 10306 Prison break
  13. 8421码,5421码,2421码,余三码的区别
  14. 掩膜裁剪tif步骤_ENVI中掩膜掩膜操作及影像分类教程(转)
  15. 关于Yolov5在测试时,图像大小被调整的问题
  16. 2419. Grass Planting
  17. minio分布式对象存储
  18. java必读10本书_新技术领先者必读的6本书
  19. vue 和nodejs是什么关系?
  20. windows7/10中Excel以单独进程窗口打开设置方法?

热门文章

  1. 使用Java语言如何实现快速文件复制?
  2. Java操作MongoDB(聚合函数)向Mongo插入及查询数据
  3. SqlServer中Group By高级使用--Inner Join分组统计
  4. akamai 指纹 和 akamai BMP 移动端sensor 风控分析
  5. 微服务学习之02支付模块构建(单个、集群)【Hoxton.SR1版】
  6. SpringCloud实战(三)集成Open-Feign实现远程⽅法调⽤
  7. 每天一道剑指offer-从上往下打印二叉树
  8. d3.js 旋转图形_1.基础知识(3) Matlab绘制特殊的图形
  9. python mysql 连接超时时间_一段时间后MySQL连接超时(Python、MySQL、FLASK)
  10. 字典 python 引用_Python字典引用的应用