打印出接收到的字节数 - 可能为零,但请确认。
这将是值得检查,你没有得到一个错误 - 并因此下流你的缓冲区。
[注:从这里开始是和平的工作 - 谢谢,我已经将它转化为社区维基所以我没有得到代表处点不应有的。]
以下代码将执行此操作。尝试一下并请回报结果。
while (1) {
numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0);
buf[numbytes] = '\0';
printf("Count: %d, Error: %d, Received: %s\n", numbytes, errno, buf);
// more code to react goes here
}
问题编辑后:
错误编号111 ECONNREFUSED - 这是不适合的recv()通常的错误代码,但更适合于开放型呼叫(开放(),连接( )等)。
在任何情况下,ECONNREFUSED都是服务器端的问题,而不是客户端 - 服务器故意拒绝接受您的传入连接,因此您需要调查链接的结尾。
为了测试这一点,改变你的代码,以便它连接到www.microsoft.com端口80,然后发送一对夫妇任何旧的垃圾线。您应该从Web服务器返回一个错误消息,指出格式错误的HTTP请求。这将证明你的客户端没有问题。
这就是我回来的时候我telnet www.microsoft.com 80
和类型hello
其次ENTER
两次:
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 27 Nov 2008 01:45:09 GMT
Connection: close
Content-Length: 326
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Verb</h2>
<hr><p>HTTP Error 400. The request verb is invalid.</p>
</BODY></HTML>
你应该会看到类似的东西。
客户端是否关闭连接? – 2008-11-26 02:25:33
尝试打印strerror(errno)并查看错误是什么 – Claudiu 2008-11-26 14:57:04
您应该在清零缓冲区之前检查numbytes> = 0,否则下溢可能使事情变得更加混乱。 – Hasturkun 2008-11-26 15:34:35