0

ソケットを介して GET リクエストを受信するにはどうすればよいですか? たとえば、私はブラウザで書いています:

127.0.0.1:41233/?data=mymessage

アプリケーションで「mymessage」を受信したい。このコードを書きましたが、recv() が WSAENOTCONN エラーを返し、修正方法がわかりません。

int main() {
    WSADATA socketData;
    SOCKET portListener;
    struct sockaddr_in saInfo = {0};
    if ( WSAStartup( MAKEWORD(1, 1), &socketData ) != 0) {
        printf( "WSAStartup() error!" );
        return 0;
    }
    portListener = socket( AF_INET, SOCK_STREAM, 0 );
    if ( portListener == INVALID_SOCKET ) {
        printf( "socket() error!" );
    } 
    else {
        saInfo.sin_family = AF_INET;
        saInfo.sin_port = htons(41233);
        saInfo.sin_addr.S_un.S_addr = inet_addr( "127.0.0.1" );
        if ( bind( portListener, ( sockaddr * ) &saInfo, sizeof(saInfo)) == SOCKET_ERROR ) {
            printf( "bind() error!\n" );
            closesocket( portListener );
            return 0;
        }
        if ( listen( portListener, SOMAXCONN ) == SOCKET_ERROR ) {
            printf( "listen() error!\n" );
            closesocket( portListener );
            return 0;
        }
        if ( accept( portListener, NULL, NULL ) == INVALID_SOCKET ) {
            printf( "accept() error!\n" );
            closesocket( portListener );
            return 0;
        }
        char buf[128];
        int rcvCount;
        rcvCount = recv( portListener, buf, 128, 0 );
        printf( "Error: %d\n", WSAGetLastError() );
        if ( rcvCount > 0 ) {
            printf( "%s\n", buf );
        }
        closesocket( portListener );
    }
    WSACleanup();
    return 0;
}
4

1 に答える 1

7

成功するacceptと、データの読み取りに使用する必要がある、新しく接続されたソケットが返されます。のチェックを除いて、戻り値を捨てていますINVALID_SOCKET。予想どおり、 にrecvは機能しませんportListener:portListener自体が接続されることはありません。

于 2013-01-17T20:00:59.943 に答える