Ich habe zwei einfache Client- und Server-Beispiel implementiert, aber es funktioniert nicht. Sowohl der Client als auch der Server frieren einfach ein, ohne dass Nachrichten gedruckt werden.Wie boost.asio verwendet wird, um Daten zwischen Client und Server hin- und herzuwechseln?
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;
}
auch ich die beste Art und Weise frage mich, eine große Menge von Daten zu/von Steckdose zu übertragen, wie Socket wir sagen, dass ich bin fertig Schreiben von Daten an die Steckdose? Und woher wissen wir, dass wir das letzte Datenbyte vom Sockel gelesen haben? Vielen Dank.
Senden Sie auch einige Metadaten - sagen Sie der anderen Seite, wie viele Daten zu erwarten sind. –