通过socket发送http请求的一个小实验出现有关问题,recv函数始终阻塞,请大家帮助一下!
通过socket发送http请求的一个小实验出现问题,recv函数始终阻塞,请大家帮助一下!!
我是XP,VS05,本机安装有apache服务器,自己用php写了一个简单的页面(就是输出一个“hello,world”),但是下面我写的程序运行的时候就在recv函数阻塞,不能动了,请大家帮忙一下。我是用的httpwatch查看的http头,但是不清楚里面的哪一个是,于是"标题"和"流"2个字符串我都用来做了http头试了一下,但是都是同样的情况在,recv函数那里阻塞了。希望大家帮帮我!先谢谢大家了。
------解决方案--------------------
我是XP,VS05,本机安装有apache服务器,自己用php写了一个简单的页面(就是输出一个“hello,world”),但是下面我写的程序运行的时候就在recv函数阻塞,不能动了,请大家帮忙一下。我是用的httpwatch查看的http头,但是不清楚里面的哪一个是,于是"标题"和"流"2个字符串我都用来做了http头试了一下,但是都是同样的情况在,recv函数那里阻塞了。希望大家帮帮我!先谢谢大家了。
- C/C++ code
#include<winsock2.h> #include<stdio.h> #pragma comment(lib, "ws2_32.lib") void main() { WSADATA wsaData; SOCKET connect_socket; SOCKADDR_IN server_addr; char recv_buf[1000]; char* send_buf = "GET /hello.php HTTP/1.1\r\n" "Accept */*\r\n" "Accept-Encoding gzip, deflate\r\n" "Accept-Language zh-cn\r\n" "Connection Keep-Alive\r\n" "Host localhost\r\n" "UA-CPU x86\r\n" "User-Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2; CIBA)\r\n\r\n"; //下面字符串我也试过了 //"GET /hello.php HTTP/1.1\r\n" //"Accept: */*\r\n" //"Accept-Language: zh-cn\r\n" //"UA-CPU: x86\r\n" //"Accept-Encoding: gzip, deflate\r\n" //"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2; CIBA)\r\n" //"Host: localhost\r\n" //"Connection: Keep-Alive\r\n\r\n" if (WSAStartup(MAKEWORD(2, 2), &wsaData)) { printf("WSAStartup failed with error\n"); return; } connect_socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(80); server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); if (SOCKET_ERROR == connect(connect_socket, (SOCKADDR*)&server_addr, sizeof(server_addr))) { printf("连接出现错误"); return; } int flag = send(connect_socket, send_buf, sizeof(send_buf), 0); if (flag == SOCKET_ERROR) { printf("发送http请求失败"); } else { printf("发送http请求成功"); } recv(connect_socket, recv_buf, 100, 0); printf("%s\n", recv_buf); closesocket(connect_socket); WSACleanup(); }
------解决方案--------------------
- C/C++ code
int flag = send(connect_socket, send_buf, sizeof(send_buf), 0);