[英]node.js http couldn't receive request from C++ clients via socket
我正在尝试将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
是正确的,但服务器什么也没收到。
我可以知道怎么了吗?
我发现了一些错误:
send
返回值未正确检查。 条件input.size() == s_len
必须为true。 EOF
recv
返回值。 它将0
r_len
视为有效数据,而不是断开连接。 这可能是您看不到服务器回复的原因:它可能已断开连接,但您没有注意到。 将node.js服务器的keepAliveTimeout
的值设置为0可以解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.