UDP协议通讯不能保证数据一定到达和数据到达顺序,请问如何解决此问题,实现无错数据传输。
我听说过给数据加头编号,但头如何定义,发生错误后如何控制重传数据?
我听说过给数据加头编号,但头如何定义,发生错误后如何控制重传数据?
解决方案 »
- delphi往word插入多表格,效果跟目标差一点点
- 在delphi7中调用ppt文档怎样才能去掉右边的滚动条
- 大哥们!如何在reportbuild的最终用户的设计界面(ppDesigner)中,可以对一个Variable变量对象进行rap代码设计?
- 怎样取当前日期?
- 紧急求援:谁有DELPHI5或7的Decision cube 2.0
- 数组 与 动态数组的 地址 问题 数组名代表首地址吗?
- 为什么我的Hook只能接收到我自己程序的消息?
- 串口程序 spcomm 的问题
- 从vb转来学delphi 大家有什么建议?
- 怎样一次将窗体上的多个DBEdit控件颜色改变?
- DBComboBox1使用?
- 我是初学者,请教各位大侠Ehlib2.5控件要如何安装。谢谢了、
var re,fd:integer
fd:=socket(af_inet,sock_dgram,0);
re:=sendto(fd,pcontent^,length(content),0,addr,sizeof(addr));
if re=socket_error then
begin
errcode:=wsagetlasterror();
freemem(pcontent);
exit;
end;
而且还有接收数据重组的问题,因为数据到达的顺序和发送顺序可能不同
而且还有接收数据重组的问题,因为数据到达的顺序和发送顺序可能不同
自定义报头,运用多线程,报头中含有顺序参数等!
或
用TCP/IP
《tcp/ip高级编程》有电子书吗,什么地方下载
实现UDP的可靠传输你有参考的例程吗?To: kuangning
我想用UDP,它的效率应该高些
大概是这样:
发送时,将数据的进行相加,作为数据包的一个CheckSumtype
TyourData = record
i_seq: Integer;
i_cksum: LongInt;
Data: Pointer; //you data buffer;
end;
i_cksum := i_cksum + PWord(Data)^;
Inc(Data, SizeOf(Word));接收时,检测Data是否等于它就行了。
这是C的;
USHORT checksum(USHORT *data; int size);
{
u_long cksum = 0;
while size > 1{
cksum += (USHORT *)data++;
size -= sizeof(USHORT);
}
if (size)
cksum += (UCHAR*)data;
cksum := cksum >> 16 + cksum & 0xffff;
cksum += cksum >> 16;
return (USHORT)(~cksum);
}
function ckecksum(Data: Pointer; nSize: Integer): WORD;
var
cksum: LongInt;
begin
cksum := 0;
while nSize > 1 do
begin
Inc(cksum, PWORD(Data)^);
Inc(Integer(Data), SizeOf(WORD));
Dec(nSize, SizeOf(WORD));
end;
if nSize > 0 then
Inc(cksum, PBYTE(Data)^);
cksum := cksum shr 16 + cksum and $FFFF;
Inc(cksum, cksum shr 16);
Result := WORD(not cksum);
end;
还有<tcp/tp高级编程这本书>这是一级棒,才35,去买一本吧
[email protected]
期待回音!