私は、サーバーに接続して ID (「16 バイト文字列」) を発行するクライアント コードを作成しています。その代わりに、同じ 16 バイト文字列が返されます。また、このサーバーから、ID であるという一方的なリクエストを受け取ることもあり、同じものを彼にも送り返す必要があります。
文字列を作成して送信すると、取得した返信を完全に解析して印刷できるため、正常に機能し、送信したものとまったく同じです。ただし、一方的な要求の部分については、送信された文字列を読み取ることができません。
これが私のコードの一部です..
string my_send_string = "123" ;
char my_send_buffer[16] ;
char my_reply[256] ;
memset(my_send_buffer,'\0', 16) ;
strncpy(my_send_buffer,my_send_string.c_str(),my_send_string.size()) ;
numBytes = send(sock_fd,my_send_buffer,16,0);
// verified that numBytes is indeed 16 ..
numBytes = recv(sock_fd, my_reply, 16, 0) ;
// verified that numBytes recvd is indeed 16 ..
printf("Original Send Reply: %s\n",my_reply ); // This prints 123, as I expect.
memset(my_reply,'\0', 16) ;
numBytes = recv(sock_fd, my_reply, 16, 0) ;
// verified that numBytes is 16.
printf("Unsolicited Request:%s\n",my_reply ); // This prints ?a?p??˝س?8?
....
ここで受信した文字列を間違ってエンコードしていると思います-これを修正する方法に関するヒントはありますか? 上記の例では、一度だけ送信しようとしましたが、異なる文字列 ID で文字列を 10 回送信すると、送信した ID が常に返されるため、1 回だけではありません。