2010-11-28 17 views
1

私はhttp://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8に投稿されたコードを使用していますが、最初の投稿と同様にデータを送信しません。 WSAGetLastError()を使用して、何が問題なのかを解決する方法を教えてください。Winsock IRCクライアントは接続してもデータを送信しません

私は次のことを試してみました:

void IRC::SendBuf(char* sendbuf) 

    { 

     int senderror = send(m_socket, sendbuf, sizeof(sendbuf), MSG_OOB);  

    if(senderror == ERROR_SUCCESS) { 
      printf("Client: The test string sent: \"%s\"\n", sendbuf); 
    } 
    else { 
      cout << "error is: " << senderror << ", WSAGetLastError: " << WSAGetLastError() << endl;  
    printf("Client: The test string sent: \"%s\"\n", sendbuf); 

    } 
    } 

、出力は次のとおりです。エラーがある:4、WSAGetLastError:0

答えて

0

あなたは代わりにそれを呼び出すのWSAGetLastErrorのアドレスを評価しています。あなたが実際にその機能を呼び出すために括弧を追加する必要があります。

void IRC::SendBuf(char* sendbuf) 
{ 
    int senderror = send(m_socket, sendbuf, strlen(sendbuf), 0); 
    if (senderror != SOCKET_ERROR) { 
     printf("Client: The test string sent: \"%s\"\n", sendbuf); 
    } else { 
     cout << "Error is: " << WSAGetLastError() << endl; 
    } 
} 

EDIT:send()関数は書き込まれたバイト数ではなく、エラーコードを返します。上記の更新されたコードのように戻り値をSOCKET_ERRORに対してテストする必要があります。あなたの場合、send()は4バイトを正常に送信したことを伝えます。

これは、sendbuf変数(バッファではなくポインタ)のサイズなので、4バイトしか送信しません。 sendbufの文字列がNULLで終了する場合は、代わりにstrlen()を使用できます。そうでない場合は、おそらく文字列の長さパラメータをIRC::SendBuf()に追加する必要があります。

+0

ここに記載されているコードの1つを取得してはいけませんか? http://msdn.microsoft.com/en-us/library/ms740668%28VS.85%29.aspx#winsock.wsaeshutdown_2 – thorvald

+0

@thorvald、必ずしもそうではありません。エラー「0」は「エラーなし」を意味し、すべてがスムーズに進みました。以前のソケット呼び出しが失敗したはずであると思われる点は何ですか? –

+0

接続後にサーバーに何も送信しなかったので、何かが間違っていると考えました。私はこのページのコードを使用しています:http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8しかし、元のポスターは彼がどのように修正されたかを言わなかった問題。 – thorvald