2012-01-19 42 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