关于Socket数据传送的问题(50分)

  • 主题发起人 主题发起人 Corn1
  • 开始时间 开始时间
C

Corn1

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ClientSocket.Socket.SendText(),当连续发送多条命令时,ServerSocket接收时把多条命令整合成一条语句处理,这种情况该怎么办?有时候,连续发送两条命令,但接收时,把第二条命令拆成两部分,前部分合到第一条,后部分没收到。(如:发送AB,CD两条,接收时成了ABC)。怎么办?如果每条命令前面都加上序号,然后放到缓冲区里,再一条条取出来,也不可取。因为通讯协议的关系,每条命令后面跟的参数数量、类型不一致,容易把参数和序号搞混。
如果用SendBuf,因为Buffer是字符型数组,我要用字符串,两者不能直接转换。
怎么办?急。在线等。
 
其实SendBuf和SendText是一样的,socket发送数据包都是基于字节流。
 
我用SendBuf试了一下,连续发送多条字符串,但服务器端用ReceiveBuf接收时只能接收到第一条.怎么办?
 
我用SendBuf,服务器端不能正常接收,只有服务器和客户端做在同一个程序时,可以接收,但也只能接收第一条;做在不同程序时不能接收.怎么回事?
用SendText可以正常接收,但连续多次发送时,接收端把多条字符串合成一条.
到底怎么办啊?
 
你需要定义数据传输协议。
如:包头标识、字节流长度等附加信息
 
我只是简单地发送字符串.
 
是的,即使是传输字符串,你也应该定义一个简单的协议。
 
问题是服务器端接收不到啊,应该不是协议问题.只能接收第一条.
 
可将数据包头定义成一个结构:
type
TPackHead = Record
nSize : Integer; //整个数据包的大小 当你收到第一个先看大小,如果小于那就说明分包了
ID : array[0..5] of Char; //这是一个断定是不是数据包的第一段 例如:'FIRST'
...
end;
 

Similar threads

S
回复
0
查看
728
SUNSTONE的Delphi笔记
S
S
回复
0
查看
734
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部