C套接字:Echo服务器回复不好

时间:2015-06-04 16:31:46

标签: c++ c sockets

我已经阅读了很多问题,但我发现了问题......

我有一个非常样本的客户端/服务器套接字:

  • 服务器与客户端之间建立连接完成
  • 接收来自客户完成
  • 的讯息
  • 在服务器端打印消息完成
  • 将邮件从服务器发送回客户端问题
  • 在客户端问题
  • 打印服务器回复

我将消息从客户端发送到服务器没有问题,但是当我发回消息时,我总是得到奇怪的字符

注意:我正在添加' \ 0'接收字符串的字符

客户端代码

//... socket initialization and other code
write(sockfd, msg, strlen(msg));    
printf("Message sent ! \n"); 

// Listen for reply
listen(sockfd, 5);
struct_size = sizeof(con_addr);
serverfd = accept(sockfd, (struct sockaddr*)&con_addr, &struct_size);

// Read message
bytes_read = read(serverfd, server_reply, 100);
server_reply[bytes_read] = '\0';
printf("Server response: %s \n", server_reply);

// Close socket
close(sockfd);
close(serverfd);
printf("Socket closed ! \n");     

服务器代码

//... socket initialization, bind and other code
struct_size = sizeof(con_addr);
if( (clientfd = accept(sockfd, (struct sockaddr*)&con_addr, &struct_size)) < 0 ){
    perror("Could not accept connection. Error: ");
    return 1;
}

// Read message
bytes_read = read(clientfd, client_message, 100);
client_message[bytes_read] = '\0';

printf("Message received: %s \n", client_message);      
// Send message back
n = write(clientfd, client_message , strlen(client_message));    

我得到的是这样的事情:

Server response: �V��i�8�y�
Server response: ��ƿi�8�{� 

1 个答案:

答案 0 :(得分:4)

您对TCP套接字的工作原理感到困惑:

看起来你现在正在尝试连接/接受双方。

其他说明:

  • 始终检查系统调用的返回值 - -1表示错误,然后检查errno(3)是否存在实际问题(strerror(3)在此处很有用)。
  • 不要假设数据是ASCII,所以不要在套接字输入上使用strlen(3),使用read(2)的返回值。