我正在尝试将GET请求从C ++客户端发送到nodejs服务器。
nodejs服务器:
const server = http.createServer((request, response) => {
console.log(request.url);
response.end("received");
})
这是我的C ++客户端:
while(getline(cin, random_input)) {
int s_len;
input = "GET / HTTP/1.1\r\n\r\n";
s_len = send(sock, input.c_str(), input.size(), 0);
if( s_len < 0)
{
perror("Send failed : ");
return false;
}
cout<<socket_c.receive(1024);
}
string tcp_client::receive(int size=512)
{
char buffer[size];
string reply;
int r_len; // received len
//Receive a reply from the server
r_len = recv(sock, buffer, sizeof(buffer), 0);
if( r_len < 0)
{
puts("recv failed");
}
if(buffer[r_len-1] == '\n') {
buffer[r_len-1] = '\0';
} else {
buffer[r_len] = '\0';
}
reply = buffer;
return reply;
}
因此C ++客户端每次在终端中键入内容时都可以发送GET请求。
如果在建立连接后立即输入一些内容,它的效果就很好。但是,如果我在建立连接后等待15-30秒,则在客户端程序上键入一些内容,尽管已发送的字节s_len
的数目是正确的,但是服务器什么也没收到。>
我可以知道出什么问题了吗
答案 0 :(得分:0)
我发现了一些错误:
send
返回值未正确检查。条件input.size() == s_len
必须为真。recv
的EOF
返回值。它将r_len
中的0
视为有效数据,而不是断开连接。这可能是您看不到服务器回复的原因:它可能已断开连接,但您没有注意到。答案 1 :(得分:0)
将node.js服务器的keepAliveTimeout
的值设置为0可以解决问题