当前位置: 代码迷 >> Delphi >> 甩分,WINSOCK小疑点
  详细解决方案

甩分,WINSOCK小疑点

热度:8802   发布时间:2013-02-25 00:00:00.0
甩分,WINSOCK小问题。
我用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));