构建基于TCP的应用层通信模型
2013-06-18 08:17
309 查看
各层的关系如下图,表述的是两个应用或CS间通信的过程:
通常使用TCP构建应用时,需要考虑传输层的通信协议,以便应用层能够正确识别消息请求。比如,一个请求的内容很长(如传文件),那肯定要分多次发送,如果没有传输层的通信协议,那应用层可能就将多次发送的消息当做独立消息来处理了。因为,在TCP中,没有消息边界这样的说法!
具体传输层协议在此举个简单例子:
0x00:消息头-未认证
0x01:消息头-已认证
0x10: 消息尾
传输层的协议是确保消息能够被应用正确解析,至于解析后如何处理,这一套规则又是应用层协议的任务了。
比如:以json格式传输的请求,在每个请求前都有funcNo来标识请求哪个服务;
在实际的使用过程中,应用层的通信协议根据实际来定义,问题相对较少;但是传输层的协议,往往因为考虑不周全或怎样,将会导致各种问题,个人认为这也是socket使用的难点所在。目前遇到过的问题:
1.使用多线程处理的服务端,将多个消息拼接到一条消息中,导致客户端解析失败;
2.消息体太长,一次发不完,导致解析失败;
3.占用一个端口后,关闭服务,端口不释放;——参数配置就好了。
4.对传输层的消息没做字符集编码要求,当一个客户端使用gbk(服务端utf-8)时出现了乱码;
通信协议是一方面,在连接、性能、并发等方面的考虑还很少,欢迎补充!
通常使用TCP构建应用时,需要考虑传输层的通信协议,以便应用层能够正确识别消息请求。比如,一个请求的内容很长(如传文件),那肯定要分多次发送,如果没有传输层的通信协议,那应用层可能就将多次发送的消息当做独立消息来处理了。因为,在TCP中,没有消息边界这样的说法!
具体传输层协议在此举个简单例子:
0x00:消息头-未认证
0x01:消息头-已认证
0x10: 消息尾
传输层的协议是确保消息能够被应用正确解析,至于解析后如何处理,这一套规则又是应用层协议的任务了。
比如:以json格式传输的请求,在每个请求前都有funcNo来标识请求哪个服务;
0x01{funcNo:01001, data:{username:user, password:pass}}0x10 //登录
与上面方式形成对比的是: 0x0101001,600570-12.01-10000x10 //以每股12.01的报价买600570的股票1000股
比对两种协议,差异明显,上面json格式一目了然,下面的方式必须要参照协议才能清楚各个字段的含义,但是传输的字符少了很多。在实际的使用过程中,应用层的通信协议根据实际来定义,问题相对较少;但是传输层的协议,往往因为考虑不周全或怎样,将会导致各种问题,个人认为这也是socket使用的难点所在。目前遇到过的问题:
1.使用多线程处理的服务端,将多个消息拼接到一条消息中,导致客户端解析失败;
2.消息体太长,一次发不完,导致解析失败;
3.占用一个端口后,关闭服务,端口不释放;——参数配置就好了。
4.对传输层的消息没做字符集编码要求,当一个客户端使用gbk(服务端utf-8)时出现了乱码;
通信协议是一方面,在连接、性能、并发等方面的考虑还很少,欢迎补充!
相关文章推荐
- uc笔记10---网络通信,套接字(Socket),基于 TCP 协议的客户机/服务器模型
- 基于select模型的tcp服务器------一个服务器如何与多个客户端进行通信?
- 基于linux poll模型的tcp服务器------一个服务器如何与多个客户端进行通信?
- Java Socket应用(五)——编程实现基于 TCP 的 Socket 通信
- 初探基于TCP的服务器/客户端结构的聊天系统(二)之应用层通信协议设计
- java网络编程学习之——构建基于多线程的网络通信模型1
- socket编程 -- 基于TCP协议的C/S通信模型及实现
- 实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用之案例分析
- 实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用
- [原][osg][osgEarth]基于qt代码实现:TCP|UDP与飞行模拟软件JSBSim的通信,现实模型飞行!
- Linux网络编程之[基于socket通信的tcp协议的编程模型]
- 基于TCP的socket通信,实现加减乘除和文件写入(方法二)
- Node.js实现基于TCP与UDP的数据通信
- 基于tcp的socket通信(单个客户端与服务端)
- 基于TCP协议的通信模型
- 基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件
- 基于winsock的阻塞和非阻塞通信模型
- 基于容器的自动构建:Docker在美团的应用
- 使用 Lotus Connections 和 Sametime 构建基于 GIS 的个人名片和即时消息应用
- 基于TCP的客户服务器模式的三种通信