UDP方式,接收数据不正常的问题
CBuilder6编写的,同一个程序,既收也发,分别运行在两台机器上,使用相同的端口,发现接收数据不太稳定,常出现接收程序收不到数据的情况。两边我用Sniff验证,发端确实发出,接收方也收到,数据的发送量和大小都不大。使用WSAAsyncSelect方式
SOCKADDR_IN from_sin,to_sin;
from_sin.sin_family = AF_INET;
from_sin.sin_port = htons(5000);
from.sin.sin_addr.s_addr = inet_addr("........//本机地址
to_sin.sin_family = AF_INET;
to_sin.sin_port = htons(5000);
to_sin.sin_addr.s_addr = inet_addr("..........//对端地址
SOCKET tempsock;
tempsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
BOOL TempBool = TRUE;
setsockopt(tempsocket,SOL_SOCKET, SO_REUSEADDR,(char *)&TempBool, sizeof(BOOL));
bind(tempsocket, (PSOCKADDR)&from_sin, sizeof(from_sin));
WSAAsyncSelect(tempsock,hwnd,WSA_READ,FD_READ);
//#define WSA_READ (WM_USER + 1001)
//增加connect调用的原因是编程方便,这里也可以不用
connect(tempsock,(PSOCKADDR)&to_sin,sizeof(to_sin);
//接收HandleWsaRead
char buf[1024];
int tolen = sizeof(SOCKADDR_IN);
len = recvfrom(tempsocket,buf,1024,FALSE,(PSOCKADDR)&(to_sin),&tolen);
//发送
send(tempsocket,buf,sizeof(buf),0);
//后来改用线程,阻塞方式,去掉select,结果还是一样