社区
网络通信/分布式开发
帖子详情
每个包:数据长度(4个字节)+数据, 这个怎么实现?
msm
2007-06-29 09:28:52
想做一个socket程序,客户端每个发送的包组成原则是 :
数据长度(4个字节)+数据
但是具体写的过程有些转换不太了解:
1、首先应该是有个char(4)表示长度,如何把数据的长度int给char(4)?
2、按照sendbuf发送,如何把char(4) 和数据内容string合成一个char数组 或者pchar ?
多谢各位!
...全文
808
13
打赏
收藏
每个包:数据长度(4个字节)+数据, 这个怎么实现?
想做一个socket程序,客户端每个发送的包组成原则是 : 数据长度(4个字节)+数据 但是具体写的过程有些转换不太了解: 1、首先应该是有个char(4)表示长度,如何把数据的长度int给char(4)? 2、按照sendbuf发送,如何把char(4) 和数据内容string合成一个char数组 或者pchar ? 多谢各位!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rainv
2007-07-02
打赏
举报
回复
mark
hongqi162
2007-06-29
打赏
举报
回复
数据长度(4个字节) Integer本身就占4个字节
hongqi162
2007-06-29
打赏
举报
回复
var
ms:TMemoryStream;
I:Integer;
s:string;
j:Integer;
begin
ms:= TMemoryStream.Create;
i:=122200;
s:='fdsafdsafdsafdsafdsafdasfdsa';
ms.Write(i,sizeof(i));
ms.Write(s,length(s));
ms.Position:=0;
ms.Read(j,4);
showmessage( IntToStr(J) );
ms.Free;
end;
msm
2007-06-29
打赏
举报
回复
呵呵,楼上兄弟可能没看懂问题意思
首先得到发送内容的长度然后把长度保存到4字节长度的变量中,然后把这个长度变量和数据内容一起sendbuf过去
imho888
2007-06-29
打赏
举报
回复
var
iTxt:string;
.....
iTxt:='1234';
IdTCPClient1.Write(iTxt);
或者
var
iBuff:array[0..3] of byte;
iBuff[0]:=$01;
iBuff[1]:=$02;
iBuff[2]:=$03;
iBuff[3]:=$04;
IdTCPClient1.WriteBuffer(iBuff[0],4,true);
我用的是INDY控件,其它控件用法都差不多。
ERR0RC0DE
2007-06-29
打赏
举报
回复
>> s:='fdsafdsafdsafdsafdsafdasfdsa';
>> ms.Write(i,sizeof(i));
>> ms.Write(s,length(s));
^^^^ error
ms.Write(s[1], Length(S));
>>type
>> myDatatype=recode
>> myLen:integer;
>> myTxt:string;
>>end;
>> WriteBuffer(iDataType,sizeof(iDataType),true);
myTxt: string是一个指针,字串的内容在指针指向的地方,将指针发给另一方有什么用?
ERR0RC0DE
2007-06-29
打赏
举报
回复
type
PMyPacket = ^TMyPacket;
TMyPacket = packed record
Len: Integer;
Str: array [0..0] of Char;
end;
function SendData(const AData: string): Boolean;
var
Packet: PMyPacket;
L, DataLen: Integer;
Buffer: array [0..10240 - 1] of Char;
begin
L := Length(AData);
DataLen := SizeOf(L) + L;
Packet := @Buffer[0];
Packet.Len := htonl(L);
Move(AData[1], Packet.Str[0], L);
Result := Socket.SendBuf(Buffer[0], DataLen) = DataLen;
end;
池龙
2007-06-29
打赏
举报
回复
用LoWord、HiWord可以将4字节拆成2个Word,再用LoByte、HiByte将其拆成4个Byte。
根据你发送的顺序,将Byte1-Byte4分别用chr()函数转成字符发送。
接收方用MakeWord、MakeLong还原。
msm
2007-06-29
打赏
举报
回复
sendstream也有些疑问,通过socket.sendsteam(ms)后。执行ms.free出错!
难道ms在sendstream后自动释放了?
msm
2007-06-29
打赏
举报
回复
服务端是java的,sendstream后服务端收到的数据内容看不懂
sendtext却可以
imho888
2007-06-29
打赏
举报
回复
定义个类型
type
myDatatype=recode
myLen:integer;
myTxt:string;
end;
var
iDataType:myDatatype;
...
iDataType.myLen:=长度
iDataType.myTxt:=内容
WriteBuffer(iDataType,sizeof(iDataType),true);
接收端同样道理,类型定义相同。
msm
2007-06-29
打赏
举报
回复
不用stream,sendText该怎么实现呢?
msm
2007-06-29
打赏
举报
回复
通过ms发的字符串怎么内容不对呢
字节
跳动Vue3框架ArcoDesign Pro整合实战:前端篇
主要服务于
字节
跳动旗下中后台产品的体验设计和技术
实现
,主要由UED设计和开发同学共同构建及维护。【前端技术】Vue 互联网最火的前端框架Vue Router路由框架Vuex...
【计算机网络】——习题解析:一个UDP用户
数据
的
数据
字段为8192
字节
,在
数据
链路层要使用以太网来传输,试问应当划分为几个IP
数据
报片?说明每一个IP
数据
报字段
长度
和片偏移字段的值
答:6个
数据
字段的
长度
:前5个是1480
字节
,最后一个是800
字节
,片偏移字段的值分别是:0, 185, 370, 555, 740, 925 习题解析 (划分结果如最后图中所示) UDP
数据
报 = 首部8
字节
+
数据
部分组成 因为数...
计算机网络-IP
数据
报计算(IP
数据
报分片)一个
数据
报部分
长度
为3400
字节
(使用固定首部)。现在经过一个网络传输,该网络的MTU为800
字节
:
一个
数据
报部分
长度
为3400
字节
(使用固定首部)。现在经过一个网络传输,该网络的MTU为800
字节
: (1)应分为几个
数据
报片? (2)各
数据
报片的
数据
字段
长度
? (3)各
数据
报片的片偏移字段值? 分析思路: IP
数据
...
.一
数据
报的总
长度
为3820
字节
,其
数据
部分为3800
字节
长(使用固定首部),需要分片为
长度
不超过1420
字节
的
数据
报片。试给出分片后
每个
数据
报片相关字段的值(
包
括MF、DF、片偏移)。
.一
数据
报的总
长度
为3820
字节
,其
数据
部分为3800
字节
长(使用...试给出分片后
每个
数据
报片相关字段的值(
包
括MF、DF、片偏移)。 总
长度
MF DF 片偏移 原始
数据
报 3820 0 0 0
数据
报片1 1420
C语言基本
数据
类型(所占
字节
数)
short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本
数据
类型。 在不同的系统上,这些类型占据的
字节
长度
是不同的: **16位编译器: char/unsigned char :1
字节
char :2
字节
short int:...
网络通信/分布式开发
1,593
社区成员
32,964
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章