当前位置: 首页 > 知识库问答 >
问题:

节点。js http无法通过套接字接收来自C客户端的请求

吕和风
2023-03-14

我正在尝试从C客户端向nodejs服务器发送GET请求。

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秒,然后在客户端程序上键入一些内容,尽管已发送的字节数正确,但服务器无法接收任何内容。

我可以知道哪里出了问题吗?

共有2个答案

国俊艾
2023-03-14

将node.js服务器保持AliveTimeout的值设置为0可以解决这个问题

林冥夜
2023-03-14

我发现了几个错误:

  1. 未正确检查返回值。条件<代码>输入。size()==s\u len必须为true
  2. 未检查EOF的返回值。它将0的r\u len视为有效数据,而不是断开连接。这可能是您没有看到服务器回复的原因:它可能已断开连接,但您没有注意到

 类似资料:
  • 问题内容: 我有一个C ++服务器和两个客户端(红宝石和Java)。一切都在64位linux机器(java 1.7.0_17)上运行。ruby客户端可以正常工作,但是java版本会出现问题。 在Java中,我尝试将字符串从客户端发送到服务器。实际上,服务器收到了整个字符串,但是服务器认为还有更多东西要接收。 红宝石客户端看起来像这样: 这里的一切工作正常。红宝石客户端发送一个字符串。服务器接收该字

  • 问题内容: 我需要使用套接字从C ++客户端到Java服务器接收包含浮点数的数组或类。但是InputStreamReader没正确。任何原因。任何更简单的建议将不胜感激。谢谢。 Java服务器代码 我将那些浮点数存储在名为“值”的类中。但是我得到的价值是垃圾。我在发送前检查C ++代码中的值,它们看起来不错。不知道哪里出了问题。请帮忙…!! 问题答案: 我建议你试试

  • 我有一个Python服务器使用unix数据报套接字连接与一个C客户端通信。下面的代码设置一个套接字,然后从客户端发送和接收一条消息。这个脚本在python 2.7中工作,但是,当在python 3中测试它时,对recv()的调用会超时等待来自客户端的消息。然而,客户端确实从服务器接收消息而没有问题。我已经用3.5.2和3.7.1在两台不同的机器上测试过了,结果相同。 更新:我添加了一个ioloop

  • 但是我这里有一些问题,有人能检查一下我的代码吗: 现在我想要接收字节到字节数组中&然后把它转换成int数组(但是数据应该在int数组中)........

  • 我试着做一个简单的服务器-客户机套接字通信,但服务器似乎无法正常工作。无论何时发送或接收,我都会收到此错误: 非插座上的插座操作:非插座上的插座操作 奇怪的是,这只会在服务器发送时出现。客户似乎还可以:

  • 我已经在Minikube上部署了一个UDP套接字服务器。套接字服务绑定到端口2152。下面是description pod命令中的IP片段。 我的客户机与minikube运行在同一个VM上,无法与服务器通信。我在客户端使用服务器地址IP 172.17.0.3,端口为2152。我还尝试使用minikube IP 192.168.49.2将UDP数据从客户端发送到服务器。 请帮忙,这里有什么问题。