打印出接收到的字节数 - 它可能为零,但请确认。
值得检查您没有收到错误 - 因此导致缓冲区下溢。
[注意:从这里开始是 Pax 的工作-谢谢,我已将其转换为 Community Wiki,因此我不会获得不应有的代表点数。]
以下代码将执行此操作。请尝试并报告结果。
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() 的常见错误代码,但更适合开放式调用(open()、connect() 等)。
无论如何,ECONNREFUSED 是服务器端的问题,而不是客户端的问题 - 服务器故意拒绝接受您的传入连接,因此您需要调查链接的那一端。
为了对此进行测试,请更改您的代码,使其在端口 80 上连接到 www.microsoft.com,然后发送几行任何旧垃圾。您应该从他们的 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>
你应该看到类似的东西。