UDP方式,接收数据不正常的问题

dablyo dablyo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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,结果还是一样
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
dablyo
网络及通讯开发 1,317 成员 8,874 内容