[英]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.