Überprüfen Sie diese beiden einfachen Server-Client-Programm. Wie in Bedingung eins. Client überträgt Daten an Server und Vies Versa ist möglich. aber wenn ich versuche, gleichzeitig oder nacheinander zu machen. Sie sind im Race-Zustand festgefahren.Einfache Datenübertragung in Boost :: asio?
Client-Programm:
#include <boost/asio.hpp>
void read(boost::asio::ip::tcp::socket& socket1, boost::system::error_code error_code)
{
boost::asio::streambuf streambuf;
boost::asio::read(socket1, streambuf, error_code);
std::istream streambuf1(&streambuf);
std::string string;
streambuf1 >> string;
std::cout << string << std::endl;
}
void write(boost::asio::ip::tcp::socket& socket1, boost::system::error_code error_code)
{
std::string string("hello");
boost::asio::write(socket1, boost::asio::buffer(string), error_code);
}
int main(int argc, char *argv[])
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket socket1(io_service);
boost::asio::ip::tcp::resolver resolver(socket1.get_io_service());
boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), "9999");
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);
boost::asio::connect(socket1, iterator);
boost::system::error_code error_code;
read(socket1, error_code);
write(socket1, error_code);
io_service.run();
return 0;
}
Und das ist Simple Server-Programm:
#include <iostream>
#include <boost/asio.hpp>
void handler(boost::system::error_code &error_code, size_t size)
{
}
void read(boost::asio::ip::tcp::socket &socket1, boost::system::error_code error_code)
{
boost::asio::streambuf streambuf;
boost::asio::read(socket1, streambuf, error_code);
std::istream streambuf1(&streambuf);
std::string string;
streambuf1 >> string;
std::cout << string << std::endl;
}
void write(boost::asio::ip::tcp::socket &socket1, boost::system::error_code error_code)
{
std::string string("hello");
boost::asio::write(socket1, boost::asio::buffer(string), error_code);
}
int main()
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket socket1(io_service);
boost::asio::ip::tcp::acceptor acceptor(io_service,
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 9999));
boost::system::error_code error_code;
acceptor.accept(socket1, error_code);
if (error_code != nullptr)
{
std::cerr << error_code.message() << std::endl;
}
write(socket1, error_code);
read(socket1, error_code);
io_service.run();
return 0;
}
Ist mein Weg falsch oder habe ich Gebrauch boost :: asio :: async_write() Verfahren zur Übertragung zurück und vierte Daten.
Was genau ist das Problem? Stürzt es ab? Funktioniert etwas nicht? 'im race condition 'Wenn genau das passiert? Bitte geben Sie weitere Informationen an. – Blacktempel
Das ist das Problem. Es stürzt nicht ab. Server und Client senden keine Daten an andere. Wenn ich Simplex-Kommunikation (Server zu Client || Client zu Server) festlege, werden Daten übertragen, aber wenn ich beides verwende (Schreib- und Lesefunktion), passiert nichts. Keine Daten senden oder empfangen auf beiden Seiten. Also das Problem. –
Bitte denken Sie daran, [eine Antwort zu akzeptieren/zu verbessern, wenn Ihre Frage gelöst wurde.] (Https://stackoverflow.com/help/someone-answers) – Blacktempel