単純なクライアントとサーバーの2つの例を実装しましたが、動作しません。クライアントとサーバーの両方がメッセージを印刷せずにフリーズします。boost.asioを使用してクライアントとサーバー間でデータをやりとりする方法は?
client.cpp
int main(int argc, char * argv[])
{
std::string raw_ip = "127.0.0.1";
int port = 3333;
try
{
asio::ip::tcp::endpoint
ep(asio::ip::address::from_string(raw_ip), port);
asio::io_service ios;
asio::ip::tcp::socket sock(ios, ep.protocol());
sock.connect(ep);
asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "request from clinet\n";
asio::streambuf response;
asio::read_until(sock, response, "\n");
std::istream response_stream(&response);
std::cout << response_stream.rdbuf() << std::endl;
}
catch(system::system_error &e)
{
std::cout << "Encounter error: " << e.what() << std::endl;
return e.code().value();
}
}
server.cpp
int main(int argc, char * argv[])
{
std::string raw_ip="127.0.0.1";
int port=3333;
try
{
asio::ip::tcp::endpoint ep(asio::ip::address_v4::any(),port);
asio::io_service ios;
asio::ip::tcp::acceptor acceptor(ios, ep);
acceptor.listen();
asio::ip::tcp::socket sock(ios);
acceptor.accept(sock);
asio::streambuf request;
asio::read_until(sock, request, "\n");
std::istream request_stream(&request);
std::cout << request_stream.rdbuf() << std::endl;
asio::streambuf response;
std::ostream response_stream(&response);
response_stream << "response from server\n";
}
catch(system::system_error &e)
{
std::cout << e.what() << std::endl;
return -1;
}
return 0;
}
はまた、私はどのように我々はそのIソケットを教えてください、ソケットから/への大量のデータを転送するための最良の方法を疑問に思ってソケットにデータを書き込んでいますか?そして、ソケットからデータの最後のバイトを読み取ったことをどのように知っていますか?ありがとう。
いくつかのメタデータも送信します。つまり、どれだけのデータを期待するかを相手側に伝えます。 –