我正在做一个编程任务,并且我已经从给定的框架代码中找出了缺失的信息,但是,对于我来说,我无法弄清楚如何实际打印从客户端收到的消息! int recv(int套接字,char * buff,int buff_len,int标志) 我希望以此填写正确的信息,以期收到来自客户端的消息。但是我不知道如何在服务器上实际打印它!
我尝试了cout << buff;但这似乎破坏了程序。 我还应该指出,我正在Putty中完成这项任务。
答案 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");