朕的 发表于 2023-9-11 02:13:50

远程服务支持类和火山基本类中的服务器有何区别?

远程服务支持库和火山基本类中的服务器有何区别?

创世魂 发表于 2023-9-11 08:14:09

本帖最后由 创世魂 于 2023-9-11 08:15 编辑

服务器属于最基础的tcp服务。

远程服务支持库 属于包装类 ,增加了一些特性,可以并发处理之类的。远程服务支持库只能和远程客户端通讯。

HP的通讯库也属于包装类,有自己的通讯协议,hp只能和hp 通讯。

shuimiao 发表于 2023-9-11 10:55:10

创世魂 发表于 2023-9-11 08:14
服务器属于最基础的tcp服务。

远程服务支持库 属于包装类 ,增加了一些特性,可以并发处理之类的。远程 ...

自己用基本的服务器类,能不能自行封装出类似hp的自组协议的通讯?

朕的 发表于 2023-9-11 14:07:20

shuimiao 发表于 2023-9-11 10:55
自己用基本的服务器类,能不能自行封装出类似hp的自组协议的通讯?

估计很难,hp属于高度封装

创世魂 发表于 2023-9-11 15:47:00

shuimiao 发表于 2023-9-11 10:55
自己用基本的服务器类,能不能自行封装出类似hp的自组协议的通讯?

肯定可以啊,hp本身就是基于tcp自己包装的。

只不过很难而已。最起码也得知道通讯基本原理,如何处理线程冲突问题。如何高效组包和拆包。如何避免粘包。

urenai 发表于 2023-9-11 16:54:11

组包和拆包

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]
查看完整版本: 远程服务支持类和火山基本类中的服务器有何区别?