作UDP报文接收程序的问题,请高手指点!
初次作UDP报文接收程序,请指点迷津!发送方为UNIX,接受方W2000P
1、用NMUDP控件有什么限制吗?好象PACKET大于1024B就不能正确收包,提示包长度为0?
2、改用 win soket:
var:
a,sock:integer;
myadd:tsockaddrin;
remote:tsockaddr;
....
sock:=winsock.socket(AF_INET,SOCK_DGRAM,0);
myadd.sa_family:=AF_INET;
myadd.sin_addr.S_addr:=INADDR_ANY;
myadd.sin_port:=htons(1001);
a:=bind(sock,myadd,sizeof(myadd));
....
len:=sizeof(remote);
num:=recvfrom(sock,buff,10000,0,remote,len);
....
可以正确收包了,但运行后界面不再响应任何操作,无法退出,只能从任务管理器中强行关闭,应如何解决?
3、报文的字节顺序问题,我弄不明白主机字节顺序和网络字节顺序的含义,应如何操作,有什么好方法吗?
1)假设 count=3,buffer中为float型,4字节
f_add:^single;
fadd:single;
mc:array[0..3]of char;
...
for j:=0 to 3 do
mc[j]:=buff[count-j]; //高低字节交换
f_add:=@mc;
fadd:=f_add^;
datatype:=format('%f',[fadd]);
可得到正确数据,若字节顺序不交换,则出错
2)buff的4、5字节存放数据为short型,2字节
numb:integer;
datatype:string;
...
numb:=byte(buff[4]);
datatype:=Format('%x', [numb]);
numb:=byte(buff[5]);
datatype:='$'+datatype+Format('%x', [numb]);
numb:=strtoint(datatype);
这里没有进行高低字节的转换,但仍得到正确数据,若交换则出错