远程服务支持类和火山基本类中的服务器有何区别?
远程服务支持库和火山基本类中的服务器有何区别?本帖最后由 创世魂 于 2023-9-11 08:15 编辑
服务器属于最基础的tcp服务。
远程服务支持库 属于包装类 ,增加了一些特性,可以并发处理之类的。远程服务支持库只能和远程客户端通讯。
HP的通讯库也属于包装类,有自己的通讯协议,hp只能和hp 通讯。
创世魂 发表于 2023-9-11 08:14
服务器属于最基础的tcp服务。
远程服务支持库 属于包装类 ,增加了一些特性,可以并发处理之类的。远程 ...
自己用基本的服务器类,能不能自行封装出类似hp的自组协议的通讯? shuimiao 发表于 2023-9-11 10:55
自己用基本的服务器类,能不能自行封装出类似hp的自组协议的通讯?
估计很难,hp属于高度封装 shuimiao 发表于 2023-9-11 10:55
自己用基本的服务器类,能不能自行封装出类似hp的自组协议的通讯?
肯定可以啊,hp本身就是基于tcp自己包装的。
只不过很难而已。最起码也得知道通讯基本原理,如何处理线程冲突问题。如何高效组包和拆包。如何避免粘包。 组包和拆包
hp好像没那么简单,应该是从底层开始封装的。
应用层简单的send、recv 函数,其实没那么复杂。
1、组包:最简单的方法就是 包头+长度+包体 或者直接 粗大暴力:长度+包体
例如:{31,5,0,0,0,1,2,3,4,5}=# 5 12345
不管被发送数据有多长,send 函数只是负责把这段数据拷贝到内核。
而内核会将这个数组自动分组发送,这个时候就是组的包是真的tcp报文。
2、拆包:最简单的方法就是 pull模型。即recv所有数据压入对应用户缓冲区。
(1)、当接收到{31,5,0,0,0,1,2,3,4,5,31,5,0,0,0,1}
1/pull 缓冲区数据长度>5 (包头1字节,包长4字节;1+4=5)合法,下一步。非法,不处理
2/判断包头=字节 31 合法,下一步。非法,断开。
3/判断pull缓冲区长度>=包长+5 ,合法,下一步。非法,不处理
4/截取缓冲区 第一部分包体,并将pull缓冲区中 前部分包体移除。
5/跳转到 1/ (因为单包可能存在N个独立包,这样会循环将pull模型中所有独立包全部处理掉,条件不满足的话,跳出,由recv函数继续填充数据。)
当然你还可以在把数据包加个密
页:
[1]