2013-01-17 163 views
0

如何通过套接字接收GET请求?比如我写在浏览器中:通过套接字接收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; 
} 

回答

7

accept成功,它返回一个新的连接插座您应该用于读取数据的使用。现在您将丢掉其返回值,除了支票INVALID_SOCKET。正如所料,recv不适用于portListenerportListener永远不会自己连接。