首页 文章

为什么我没有得到服务器的完整响应?

提问于
浏览
1

我想知道,为什么我的服务器(Win)没有得到完整的响应来显示它在客户端(* nix)/

以下是代码:

Server ( Win ) : http://pastebin.com/CC1EHj0N
Client ( *nix ) : http://pastebin.com/bFiLjMHh

来自客户端的请求(“来自Gentoo的Hello!”)我的服务器运行良好,但发送给客户端的响应在客户端没有呈现完整 .

如你所见,我用过:

char response[]

然后在send方法中使用sizeof()调整大小 .

在调试器中,我得到的结果很好,必须发送所有sizeof字节 .

但在客户端,我不是所有字符串:(

为什么?

1 回答

  • 1

    您的代码存在(至少)2个问题:

    • 在您的客户端中,您的缓冲区小于服务器发送的消息 . 因此, it's inherently impossible to receive the entire message in one go

    • 你只收到一次 . 没有什么可以阻止 TCP 一个接一个地处理你的字节 . TCP is stream-oriented ,即使你're providing enough space (which you'重新没有)

    扩展第一点:

    • 您从服务器发送此消息
    char response[] = "Hello from Windows 7 Home Basic!\r\n";`
    result = send(sock_cli, response, sizeof(response), 0);
    
    • 这是你的接收缓冲区:
    char mess[] = "Hello from Gentoo!\r\n";
    char buffer[sizeof(mess)];
    /* ... */
    
    recv(sock, buffer, sizeof(mess), 0);
    

    对于初学者,您可以确保客户端在缓冲区中尝试 recv ,该缓冲区至少与服务器发送的最大消息一样大 . 但真正的解决方案是循环中的 recv .

相关问题