我想知道,为什么我的服务器(Win)没有完全响应以在客户端显示它(* nix)/
以下是代码:
Server ( Win ) : http://pastebin.com/CC1EHj0N<br />
Client ( *nix ) : http://pastebin.com/bFiLjMHh
来自客户端的请求(“来自Gentoo的Hello!”)我的服务器运行良好,但发送给客户端的响应在客户端没有呈现为满。
如你所见,我用过:
char response[]
然后在send方法中使用sizeof()调整大小。
在调试器中,我得到的结果很好,必须发送所有sizeof字节。
但是在客户端,我不是所有的字符串:(
为什么?
答案 0 :(得分:1)
您的代码存在(至少)2个问题:
在您的客户端中,您的缓冲区小于服务器发送的消息。因此,一次性收到整个邮件本来就不可能
您只收到一次。没有什么能阻止TCP
逐个处理字节。 TCP是面向流的,即使你提供足够的空间(你不是)
扩展第一点:
您从服务器发送此消息
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
。