Receive GET request through sockets

拥有回忆 提交于 2019-12-25 14:42:29

问题


How can I receive GET request through sockets? For example I am writing in browser:

127.0.0.1:41233/?data=mymessage

and I want my application to receive "mymessage". I wrote this piece of code but recv() returns WSAENOTCONN error and I don't know how to fix it.

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;
}

回答1:


When accept succeeds, it returns a fresh connected socket which you should use for reading data. Now you're throwing away its return value, except a check for INVALID_SOCKET. As expected, recv doesn't work for portListener: portListener never becomes connected itself.



来源:https://stackoverflow.com/questions/14387035/receive-get-request-through-sockets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!