传送不定长数据(100分)

  • 主题发起人 主题发起人 whether_bobo
  • 开始时间 开始时间
W

whether_bobo

Unregistered / Unconfirmed
GUEST, unregistred user!
数据格式如:|数据长度(8byte)|数据内容(不定长)|
怎样用 serversocket clientsocket传输
 
先将数据写到流,然后sendBuffer就可以了
 
写进byte数组再送也可以。
 
关键是不定长,接收的时候我的buffer不能一次接收完,所以要分几次收
可是我怎么知道数据的内容全部收完了,哪次是最后一次
 
数据头重新定义,
DataHead=Record
DataLen:word;
pkgNm :word;
isEnd :Boolean;
end;

然后将每个包的头部加上头记录。
 
能不能再解释的清楚一些,怎么把包加上头记录?
怎么知道数据的内容全部收完了,哪次是最后一次?
谢谢
 
我想你应该这样做:
1。第一次送总长度。
2。数据发送时在头上加上长度,当然是固定长的,比如前12位表示本次发送的数据长度。,
3。接收方根据总长度及每次收到的长度来确定是否接收完毕!
 
我测试使用sendbuf,recievebuf
可是每次revievelength总和肯定大于我要传送的数据长度
不知哪里有问题
revievelength是否就是我每次传送数据的长度?
 
Datalen:本次数据长度
pkgNm :本次数据包编号
isEnd :是否结束数据包

 
哦,你们理解错了
发送方并不是分开发送,而是一次发送所有数据
接收方只能知道总的数据长度
 
将数据写到Buf,array of byte数组. 然后发送.
接收时.
copyMemory(@Dest[Position],@Buf[Position,Len)

 
我想问的是如何接收
 
winsock在发送数据时会自动打包的,好象是一次送76K吧!
那你接收的时候判断一下长度不就行了吗?
 
to lujr
具体怎么判断长度?
 
Clientsocket.read事件中:
len:=Socket.receiveLength;
除去前8位,那后面不是你的变长数据的长度吗?
 
后退
顶部