我正在了解 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 启动和套接字定义)。