2013-01-17 164 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永遠不會自己連接。