2012-01-19 8 views
0

Winsock2のsend()関数に問題が発生しました。どのようなデータを提供しても、send()関数は常に0を返します。例えば0バイトが送信され、エラーは発生しません。私はしばらくの間Googleを検索しましたが、まだ解決策を見つける必要がありません。私は送信されているデータが正しくフォーマットされていることを確認しました。有効なソケットを渡しています。ここで 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; 

この動作を引き起こしているものを任意のアイデアは?あなたのコードは成功時にゼロにiSentを設定 --Dylan

答えて

4

あなたの助けを http://pastebin.com/URsaFz0Q

おかげで、:

は、ここでファイルの完全なソース(すべての悪いコーディング習慣はご容赦)です。成功するとsendはSOCKET_ERRORを返さないので、send(...)==SOCKET_ERRORはfalseです。

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

うん、偽C.

の変更ではゼロです。奇妙なことに、私は前にその技術を使っていて、問題がないと誓っていたかもしれません。いずれにしても、助けてくれてありがとう! – dymk

+0

@Dylan:あなたはダビデの答えを受け入れるつもりですよね? :) –

+0

申し訳ありません。それを受け入れる前に5 minuetsを待たなければなりませんでした。受け入れられました。 – dymk