繁体   English   中英

node.js http无法通过套接字从C ++客户端接收请求

[英]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是正确的,但服务器什么也没收到。

我可以知道怎么了吗?

我发现了一些错误:

  1. send返回值未正确检查。 条件input.size() == s_len必须为true。
  2. 没有检查EOF recv返回值。 它将0 r_len视为有效数据,而不是断开连接。 这可能是您看不到服务器回复的原因:它可能已断开连接,但您没有注意到。

将node.js服务器的keepAliveTimeout的值设置为0可以解决问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM