Я пишу некоторый фрагмент клиентского кода, который подключится к серверу и выдаст ему идентификатор — «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?
....
Я думаю, что здесь я неправильно кодирую полученную строку — какие-нибудь советы, как я могу это исправить? В приведенном выше примере я попытался отправить его один раз, но если я отправляю строку 10 раз с разными идентификаторами строк, я всегда возвращаю отправляемый идентификатор, так что это не разовая вещь.
Задача ещё не решена.
Других решений пока нет …