私のプログラムは、いくつかの UDP メッセージを受け取ります。それぞれのメッセージは、クライアントによるマウス クリックで送信されます。プログラムには、いくつかのパラメータを設定するためだけのメイン スレッド (GUI) があり、2 番目のスレッドが作成されます。
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 回クリックする必要があります。メイン スレッドは常にビジーではなく、2 番目のスレッドは着信メッセージのみを解析し、いくつかの変数を拡張します。スレッドに優先順位を割り当てていません。
何か提案はありますか?