我想知道,为什么我的服务器(Win)没有得到完整的响应来显示它在客户端(* nix)/
以下是代码:
Server ( Win ) : http://pastebin.com/CC1EHj0N
Client ( *nix ) : http://pastebin.com/bFiLjMHh
来自客户端的请求(“来自Gentoo的Hello!”)我的服务器运行良好,但发送给客户端的响应在客户端没有呈现完整 .
如你所见,我用过:
char response[]
然后在send方法中使用sizeof()调整大小 .
在调试器中,我得到的结果很好,必须发送所有sizeof字节 .
但在客户端,我不是所有字符串:(
为什么?
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'重新没有)扩展第一点:
对于初学者,您可以确保客户端在缓冲区中尝试
recv
,该缓冲区至少与服务器发送的最大消息一样大 . 但真正的解决方案是循环中的recv
.