Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用低级c+;发送GET请求时网站没有响应+;网络图书馆 我试图创建一个程序,用C++低级网络从网站下载数据。 代码如下: #include <iostream> #include <string> #include <string.h> #include <netdb.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int status, sock; struct addrinfo hints; struct addrinfo *servinfo; int main(int argc, char** argv){ memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; int MAXDATASIZE = 100; char request[] = "GET /robots.txt HTTP/1.1\n"; char buf[MAXDATASIZE]; if((status = getaddrinfo(argv[1], argv[2], &hints, &servinfo)) != 0){ std::cout << "getaddrinfo: " << gai_strerror(status) << "\n"; return 2; } if((sock = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == -1){ std::cout << "Error creating socket\n"; return 2; } if(connect(sock, servinfo->ai_addr, servinfo->ai_addrlen) == -1){ std::cout << "Error connecting to host " << argv[1] << " at port " << argv[2] << "\n"; return 2; } if((send(sock, request,strlen(request), 0)) == -1){ std::cout << "Error communicating with website\n"; return 2; } if(recv(sock, buf, MAXDATASIZE, 0) == -1){ std::cout << "Error recciving data from " << argv[1] << " at port " << argv[2] << "\n"; } std::cout << buf << std::endl; close(sock); freeaddrinfo(servinfo); } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #include作为主机,80作为端口,它挂起在recv()调用处。为了测试请求是否是问题所在,我使用telnet连接到google,并使用相同的请求,结果成功了。我还尝试将netcat绑定到计算机上的一个端口,然后使用我的程序连接到该端口。请求被正确地发送到netcat,当我用测试消息响应时,我的程序接收到了它_C++_C_Linux_Http_Networking - Fatal编程技术网

使用低级c+;发送GET请求时网站没有响应+;网络图书馆 我试图创建一个程序,用C++低级网络从网站下载数据。 代码如下: #include <iostream> #include <string> #include <string.h> #include <netdb.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int status, sock; struct addrinfo hints; struct addrinfo *servinfo; int main(int argc, char** argv){ memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; int MAXDATASIZE = 100; char request[] = "GET /robots.txt HTTP/1.1\n"; char buf[MAXDATASIZE]; if((status = getaddrinfo(argv[1], argv[2], &hints, &servinfo)) != 0){ std::cout << "getaddrinfo: " << gai_strerror(status) << "\n"; return 2; } if((sock = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == -1){ std::cout << "Error creating socket\n"; return 2; } if(connect(sock, servinfo->ai_addr, servinfo->ai_addrlen) == -1){ std::cout << "Error connecting to host " << argv[1] << " at port " << argv[2] << "\n"; return 2; } if((send(sock, request,strlen(request), 0)) == -1){ std::cout << "Error communicating with website\n"; return 2; } if(recv(sock, buf, MAXDATASIZE, 0) == -1){ std::cout << "Error recciving data from " << argv[1] << " at port " << argv[2] << "\n"; } std::cout << buf << std::endl; close(sock); freeaddrinfo(servinfo); } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #include作为主机,80作为端口,它挂起在recv()调用处。为了测试请求是否是问题所在,我使用telnet连接到google,并使用相同的请求,结果成功了。我还尝试将netcat绑定到计算机上的一个端口,然后使用我的程序连接到该端口。请求被正确地发送到netcat,当我用测试消息响应时,我的程序接收到了它

使用低级c+;发送GET请求时网站没有响应+;网络图书馆 我试图创建一个程序,用C++低级网络从网站下载数据。 代码如下: #include <iostream> #include <string> #include <string.h> #include <netdb.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int status, sock; struct addrinfo hints; struct addrinfo *servinfo; int main(int argc, char** argv){ memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; int MAXDATASIZE = 100; char request[] = "GET /robots.txt HTTP/1.1\n"; char buf[MAXDATASIZE]; if((status = getaddrinfo(argv[1], argv[2], &hints, &servinfo)) != 0){ std::cout << "getaddrinfo: " << gai_strerror(status) << "\n"; return 2; } if((sock = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == -1){ std::cout << "Error creating socket\n"; return 2; } if(connect(sock, servinfo->ai_addr, servinfo->ai_addrlen) == -1){ std::cout << "Error connecting to host " << argv[1] << " at port " << argv[2] << "\n"; return 2; } if((send(sock, request,strlen(request), 0)) == -1){ std::cout << "Error communicating with website\n"; return 2; } if(recv(sock, buf, MAXDATASIZE, 0) == -1){ std::cout << "Error recciving data from " << argv[1] << " at port " << argv[2] << "\n"; } std::cout << buf << std::endl; close(sock); freeaddrinfo(servinfo); } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #include作为主机,80作为端口,它挂起在recv()调用处。为了测试请求是否是问题所在,我使用telnet连接到google,并使用相同的请求,结果成功了。我还尝试将netcat绑定到计算机上的一个端口,然后使用我的程序连接到该端口。请求被正确地发送到netcat,当我用测试消息响应时,我的程序接收到了它,c++,c,linux,http,networking,C++,C,Linux,Http,Networking,有人知道谷歌为什么不发送数据吗 我正在使用fedora 32,如果这有帮助的话您的软件没有挂起。相反,服务器正在等待客户机已完成发送头的指示,这通过发送空行表示。在客户端发送空白行之前,服务器无法响应。 将您的请求更改为: char request[] = "GET /robots.txt HTTP/1.1\r\n\r\n"; 首先,您的行结尾不正确。HTTP使用CR+LF,因此C++中的\r\n某些服务器可能会抱怨缺少头,例如连接,接受和用户代理服务器也可能会出现空行,这

有人知道谷歌为什么不发送数据吗


我正在使用fedora 32,如果这有帮助的话

您的软件没有挂起。相反,服务器正在等待客户机已完成发送头的指示,这通过发送空行表示。在客户端发送空白行之前,服务器无法响应。 将您的请求更改为:

char request[] = "GET /robots.txt HTTP/1.1\r\n\r\n";

首先,您的行结尾不正确。HTTP使用CR+LF,因此C++中的
\r\n
某些服务器可能会抱怨缺少头,例如
连接
接受
用户代理
服务器也可能会出现空行,这通常表示HTTP请求/响应主体的开始,但即使没有发送正文,通常仍然存在,而且100字节的缓冲区大小对于一个请求来说太短,根据惯例,缓冲区的大小是512的倍数(例如1024/2048/4096)