我的程序接收到一些 UDP 消息,每个消息都是由客户端通过鼠标单击发送的。该程序具有仅用于设置一些参数的主线程(GUI)和创建第二个线程,具有
CreateThread(NULL, 0, MyFunc, &Data, 0, &ThreadTd);
即监听 UDP 数据包。这是 MyFunc:
...
sd=socket(AF_INET, SOCK_DGRAM, 0);
if(bind(sd,(struct sockaddr *)&server,sizeof(struct sockaddr_in))==-1)
....
while(true){
bytes_received=recvfrom(sd,buffer,BUFFER_SIZE,0,(struct sockaddr *)&client,&client_length);
//parsing of the buffer
}
为了证明没有丢包,如果我使用了一个简单的脚本来侦听客户端使用某个端口发送的 UDP 消息,则发送的所有数据包都被我的计算机接收。当我运行我的应用程序时,只要客户端第一次单击鼠标,就会收到 UDP 消息,但是如果我尝试发送其他消息(其他鼠标单击),服务器不会收到它们(就像他没有t 捕获它们)和客户端,用户必须在服务器捕获消息之前至少单击 2 次。主线程并不一直忙,第二个线程只解析传入的消息,增强了一些变量,我没有为线程分配任何优先级。
有什么建议吗?