打印出接收到的字节数 - 它可能为零,但请确认这一点。
值得检查一下您是否没有收到错误 - 从而导致缓冲区下溢。
[注:从这里开始就是Pax的作品了——谢谢,并且我已将其转换为社区 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
twice:
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>
你应该看到类似的东西。