そこで、クライアントが文字列を送信し、サーバーがその文字列を受信して「Back」という単語を含めて返信するように、サーバーとクライアント (udp) 間のソケット接続を作成するこのプログラムを作成しました。問題は、最初に実行したときに機能しないことです。クライアントはエコーされた文字列を出力しません。最初に実行したときに受信しないことはほぼ確実です。
ただし、プログラムを終了して同じコマンドで再度実行すると、動作し、その後は実行するたびに動作し続け、想定どおりにすべてをエコーバックします。以下は、コード行を送受信するクライアントとサーバーです。
クライアント側:
len = sendto (s,string,strlen(string),0,(struct sockaddr*)&servAddr, sizeof (servAddr));
// Recieve echo string
recvfrom (s,buffer,sizeof(buffer),0,NULL,NULL);
buffer[len+5] = '\0';
// Print and verify echoed string
fputs(buffer,stdout);
サーバ側:
len = recvfrom (s,buffer, sizeof(buffer), 0, (struct sockaddr*)&clntAddr, &clntAddrLen);
buffer[len] =' ';
buffer[len+1] ='B';
buffer[len+2] ='a';
buffer[len+3] ='c';
buffer[len+4] ='k';
buffer[len+5] = '\0';
// Send String
sendto (s,buffer, strlen(buffer)+1, 0, (struct sockaddr*)&clntAddr, sizeof(clntAddr));
バインドされ、すべてが正しく機能しています。最初だけ失敗するのはなぜですか?
あなたの助けに感謝。