TCP客户端服务器程序

时间:2019-03-25 04:58:06

标签: c++

我正在做一个编程任务,并且我已经从给定的框架代码中找出了缺失的信息,但是,对于我来说,我无法弄清楚如何实际打印从客户端收到的消息! int recv(int套接字,char * buff,int buff_len,int标志) 我希望以此填写正确的信息,以期收到来自客户端的消息。但是我不知道如何在服务器上实际打印它!

我尝试了cout << buff;但这似乎破坏了程序。 我还应该指出,我正在Putty中完成这项任务。

1 个答案:

答案 0 :(得分:1)

您没有显示用于接收和打印消息的实际代码,但是cout << buff;行为异常的最可能原因是因为它期望其参数指向以0终止的字符数组,并且recv()不会0终止它写入数组的数据。因此,<<运算符中的打印逻辑将迭代数组的末尾以寻找0终止符字节,并调用未定义的行为。

避免该问题的简单方法是自己添加一个0终止符字节,如下所示:

 char buff[512];
 int numBytesReceived = recv(sockFD, buff, sizeof(buff)-1, 0);
 if (numBytesReceived > 0)
 {
    buff[numBytesReceived] = '\0';  // place 0-terminator byte at end of received data
    cout << buff << endl;  // now it's safe to print
 }
 else if (numBytesReceived == 0) cout << "connection closed!" << endl;
 else perror("recv");