打印出接收到的字節數 - 可能爲零,但請確認。
這將是值得檢查,你沒有得到一個錯誤 - 並因此下流你的緩衝區。
[注:從這裏開始是和平的工作 - 謝謝,我已經將它轉化爲社區維基所以我沒有得到代表處點不應有的。]
以下代碼將執行此操作。嘗試一下並請回報結果。
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