2017-04-15 64 views
0

使用升壓ASIO我編寫簡單的代碼:我發送TCP請求的HTTP服務器 - 但沒有任何迴應

asio::io_service io_service; 

asio::ip::tcp::socket s(io_service); 
asio::ip::tcp::resolver resolver(io_service); 
asio::connect(s, resolver.resolve({ "aire.pl", "80" })); 

cout << "connected" << endl; 

string request = "GET http://aire.pl/ HTTP/1.1"; 
size_t request_length = std::strlen(request.c_str()); 
asio::write(s, asio::buffer(request, request_length)); 

cout << "packet sent" << endl; 

char reply[1024]; 
size_t reply_length = asio::read(s, asio::buffer(reply, request_length)); 
std::cout << "Reply is: "; 
std::cout.write(reply, reply_length); 
std::cout << "\n"; 

一切似乎都做工精細,因爲使用TCP突降我可以看到我的包該方案已派出:

enter image description here

但我沒有任何迴應。一個有趣的事實是,如果HTTP服務器是nginx,它可以正常工作!在這個例子中,HTTP服務器是Apache2。怎麼了?

+1

您是否使用Wireshark或類似軟件檢查您是否得到迴應? – CurlyCorvus

+2

你最好發送一個HTTP請求,而不是TCP請求。你沒有,完全。你需要'\ r \ n \ r \ n'結尾。 – EJP

回答

2

看起來您並未發送完整的HTTP請求。 GET行之後是可選標題,後面跟着空白行以指示標題結尾。即使您不想發送任何標題,也需要發送空白行,以便服務器知道它已收到整個請求。

\r\n\r\n添加到您的request字符串的末尾。

相關問題