[英]C++ Socket Connection on Linux
我是C ++的新手,正在尝试建立与远程服务器的连接,但是在使其正常工作时遇到了问题。 规范:Ubuntu 16.04,预安装了g ++编译器,当我运行以下代码时,它返回“ pre-standard C ++”:
if( __cplusplus == 201103L ) std::cout << "C++11\n" ;
else if( __cplusplus == 19971L ) std::cout << "C++98\n" ;
else std::cout << "pre-standard C++\n" ;
我的代码如下:
#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
using namespace std;
int main() {
int client;
int portNum = 80;
bool isExit = false;
int bufsize = 1024;
char buffer[bufsize];
const char ip[] = "216.58.210.36"; //google ip for test connection
const char req[] = "GET / HTTP/1.1\nHost: www.google.com"; //test
char res[bufsize];
struct sockaddr_in server_addr;
client = socket(AF_INET, SOCK_STREAM, 0);
if (client < 0) {
cout << "\nError establishing socket..." << endl;
exit(1);
}
cout << "\n=> Socket client has been created..." << endl;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(portNum);
inet_aton(ip, &server_addr.sin_addr);
if (connect(client,(struct sockaddr *)&server_addr, sizeof(server_addr)) == 0){
cout << "=> Connection to the server port number: " << portNum << endl;
}
send(client, req, bufsize, 0);
cout << "=> Awaiting confirmation from the server..." << endl;
recv(client, buffer, bufsize, 0);
cout << "=> Connection confirmed, response:" << buffer << endl;
cout << res << endl;
close(client);
return 0;
}
创建了客户端,并且套接字已连接,但是代码挂在对recv()的调用上,并且未收到响应。 我假设这是因为我发送的请求格式/数据类型/等错误。 谁能告诉我我要去哪里错了? 干杯!
您尚未发送完整的HTTP请求,因此服务器正在等待更多数据。
您需要使用\\ r \\ n作为行分隔符,并且您的请求必须以空行结尾:
const char req[] = "GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n";
另外,如其他人所评论,您需要检查错误。
您还从缓冲区发送了1024字节的数据,该缓冲区要小得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.