2012-01-19 46 views
0

我一直在遇到Winsock2函數send()的問題。無論我提供什麼數據,send()函數總是返回0;例如發送0個字節,並且沒有錯誤。我現在谷歌搜索了一段時間,但還沒有找到解決方案。我已經檢查過要發送的數據格式是否正確,並且我傳遞了一個有效的套接字。WinSock的send()總是返回0字節發送

這裏是一個錯誤存在於代碼片段(我至少認爲):

//Send HTTP header to server 
#define MAX_HEADER_LEN 512 

#ifdef UNICODE 

    char* cpHost = (char*)malloc(sizeof(char) * (_tcslen(cpServer)+1)); 
    wcstombs(cpHost, cpServer, _tcslen(cpServer)); 
    cpHost[_tcslen(cpServer)] = '\0'; 

#else 
    char* cpHost = cpServer; 
#endif 

    char cpHeader[MAX_HEADER_LEN]; 
    sprintf(cpHeader, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", "/", cpHost); 

#ifdef UNICODE 
    free(cpHost); 
#endif 

    //Send the HTTP request to the sever 
    int iSent; 
    if(iSent = send(servSocket, cpHeader, strlen(cpHeader), 0) == SOCKET_ERROR) 
    { 
     _tprintf(TEXT("Error sending header to server: %d\n"), WSAGetLastError()); 
     WSACleanup(); 
     return 2; 
    } 

    _tprintf(TEXT("Sent '%d' bytes\n"), iSent); 

    return 0; 

任何想法是什麼原因造成這種現象?

下面是該文件的完整源代碼(請原諒所有壞的編碼習慣): http://pastebin.com/URsaFz0Q

感謝您的幫助, --Dylan

回答

4

你的代碼設置iSent對成功爲零。成功時,send不會返回SOCKET_ERROR,因此send(...)==SOCKET_ERROR爲false。假是C.

變化:

int iSent; 
if(iSent = send(servSocket, cpHeader, strlen(cpHeader), 0) == SOCKET_ERROR) 

要:

int iSent = send(servSocket, cpHeader, strlen(cpHeader), 0); 
if(iSent == SOCKET_ERROR) 

或者:

int iSent; 
if((iSent = send(servSocket, cpHeader, strlen(cpHeader), 0)) == SOCKET_ERROR) 
+0

是的,就是這樣。奇怪的是,我可以發誓我之前使用過這種技術,而且沒有問題。無論哪種方式,感謝您的幫助! – dymk

+0

@Dylan:你現在要接受David的回答,對吧? :) –

+0

對不起,在接受之前不得不等待5分鐘,然後就受到了傷害。公認。 – dymk