我在C ++ for Windows中做一个简单的TCP服务器来回应传入的数据。我有一个问题。在我解释我的问题之前,我必须说Winsock已正确设置,并且任何IP地址作为源都会出现此问题。
建立连接时的一般行为是:
在连接仍处于活动状态时运行的循环中,它必须回显数据,并在其前面加上REPLY字。
为此,我目前正在使用两个send()调用:
但是使用Putty Client,我得到了这个: 回复data_echoed回复。
为什么在最后一次发送呼叫后发送REPLY,如果它是第一个???我会在问题发生时发布一些代码:
//Reply to client
message = "HELLO CLIENT!! READY TO ECHO.\n";
send(new_socket, message, strlen(message), 0);
///Enter into a loop until connection is finished.
printf("%s \n\n", "Incoming data goes here: ");
do{
///Clear buffer and receive data.
memset(buffer, 0, sizeof(buffer));
ret = recv(new_socket, buffer, sizeof(buffer), 0);
printf("%s", buffer);
///Send a REPLY WORD and the data echoed.
send(new_socket, "REPLY\r\n", 7, 0);
send(new_socket, buffer, sizeof(buffer), 0);
}while(ret != SOCKET_ERROR);
这有什么问题?我将删除第一个电话,双重效果消失。为什么我不能一个接一个地发送两个电话?
答案 0 :(得分:3)
在发送recv
之前,您会忽略REPLY
的返回值,因此无论发生什么情况,您都会发送REPLY
后跟缓冲区的内容。在您第一次回应之后,会发生一些事情,无论它是什么,您都会发送REPLY
。
您的代码假装它正在接收并回显应用程序级别的消息。但是没有代码可以实际实现应用程序级别的消息。 TCP不支持应用程序级消息,因此如果您需要它们,则必须实现它们。你显然想要他们。你还没有实现它们。
换行字符是否划分邮件?如果是这样,那么在数据流中找到它们的代码在哪里?如果没有,那会是什么?