Я узнал о Winsock, и у меня возникла странная проблема при отправке и получении простой строки. Вот мой код (чистый C):
Клиент:
//...
//Declarations and stuff
//----------- SEND SOME DATA -------------------------------------------------
char string1[] = "string-1";
int bytes_sent = 0;
bytes_sent = send(client_socket, string1, strlen(string1), 0);
printf("BYTES SENT: %i\n", bytes_sent);
printf("\n-----------------------------------------------\n\n");
system("pause");
//...
Сервер:
//...
//Declarations and stuff
//----------- START LISTENING FOR REQUESTS ------------------------------------
SOCKET ClientSocket;
#define BUFFER_SIZE 256
int size;
struct sockaddr_in client_info;
char client_ip[16];
char data_received[BUFFER_SIZE];
int bytes_received = 0;
listen(ListenSocket, SOMAXCONN);
while(1){
ClientSocket = accept(ListenSocket, (struct sockaddr *)&client_info, &size);
strcpy(client_ip, inet_ntoa(client_info.sin_addr));
do{
bytes_received = recv(ClientSocket, data_received, BUFFER_SIZE, 0);
if(bytes_received > 0){
printf("DATA RECEIVED FROM %s: %s (%i bytes)\n", client_ip, data_received, bytes_received);
}
}while(bytes_received > 0);
printf("\n-----------------------------------------------\n\n");
}
//...
Проблема в том, что сервер печатает мою строку + какие-то странные символы (см. Рис.).
Я использую потоковый сокет. Пример очень простой, поэтому я не знаю, что может быть не так. Проблема исчезает (сервер печатает строку OK), если я произвольно изменяю строку, размер буфера сервера или и то, и другое. Проблема устраняется, если в вызове send () я использую sizeof () вместо strlen (). Я немного потерялся здесь. Пожалуйста, будьте добры, если я что-то пропустил, это мой самый первый пост здесь. Я могу предоставить весь код (в основном это запуск Winsock и определение сокета).