我用API 做了个UDP通信的程序。发得出,收得到用线程收的。
发送几个字节,接收的长度也一样。但就是数据不对。不知道为什么。
比如我发了8个BYTE 1,2,3,4,5,6,7,8
收的数组大小为一千,收到数据后显示长度为8。
那么我在这一千的数组里取前8位根本和原来的都不一样。为知道为什么。
------解决方案--------------------------------------------------------
举例说明白,发的什么,怎么发的,怎么收的
------解决方案--------------------------------------------------------
这是发。
SetLength(msg,8);
msg:=strtobyte('12345678');
sendto(moSocket,msg,Length(msg),0,addr,SizeOf(addr));
这是收
UDPLEN:=SizeOf(addr);
intReceiveUDPSize:=recvfrom(moSocket,
arayReceiveUDPBuf,
max_rec,0,
addr,UDPLEN);
if intReceiveUDPSize<=0 then Exit;
出了数据内容不正确。其它的都正确。
------解决方案--------------------------------------------------------
我比较关心socket创建时的代码是什么样的,是否指定了标准的大尾模式AF_INET,程序处理时是否严格按照大尾方式进行内存组织
------解决方案--------------------------------------------------------
AF_INET 真是高手,对的。
i:= WSAStartup($101,wd);
port:=1234;
if(i<>0)then exit;
addr.sin_family:=AF_INET;
addr.sin_port:=ntohs(port);
addr.sin_addr.S_addr:=inet_addr('127.0.0.1');
moSocket:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
i:=bind(moSocket,addr,SizeOf(addr));