通过套接字接收GET请求
Receive GET request through sockets
如何通过套接字接收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: %dn", WSAGetLastError() );
if ( rcvCount > 0 ) {
printf( "%sn", buf );
}
closesocket( portListener );
}
WSACleanup();
return 0;
}
当accept
成功时,它返回一个新的连接的套接字,您应该使用该套接字读取数据。现在你扔掉了它的返回值,除了检查INVALID_SOCKET
。正如预期的那样,recv
对portListener
不起作用:portListener
永远不会自己连接。
相关文章:
- c++程序,在windows下发送带有参数的http get请求
- C++HTTP客户端在GET请求后挂起read()调用
- 如何使用两个发送函数发送 GET 请求
- 使用 C++ 中的预定义变量发出 cURL GET 请求
- cURL GET请求函数未返回字符串
- 使用 C++ 套接字发出 HTTP GET 请求时出现 301 错误
- 如何编写Qt HTTP GET请求
- 使用Winsock2向具有域HTTPS的Webstie发送GET请求
- 对GET请求使用CURL
- C++-QtQObject::跨类连接GET请求使用情况
- Qt中的POST和GET请求
- GET请求后服务器的响应不正确
- 使用boost::asio发送http GET请求,类似于cURL
- 向twitter API发出经过验证的GET请求
- C++HTTP GET请求问题
- 尝试发送 GET 请求,将 301 发送到同一地址
- 带有参数的 HTTP GET 请求
- 在c++中获取字节范围的HTTP GET请求
- 带有boost oauth2访问令牌的HTTP GET请求
- 在 Winsock C++ 中编写正确的"HEAD"和"GET"请求