C++ 为什么数据不能传输
我试图设计一个客户机-服务器程序,其中双方{server,client}都可以与async_connect通信。 这是我的服务器程序代码:C++ 为什么数据不能传输,c++,boost-asio,C++,Boost Asio,我试图设计一个客户机-服务器程序,其中双方{server,client}都可以与async_connect通信。 这是我的服务器程序代码: std::string GetMessage() { std::string user("User"); user += client; client++; return user; } class TcpConnection : public boost::enable_shared_from_this&
std::string GetMessage()
{
std::string user("User");
user += client;
client++;
return user;
}
class TcpConnection
: public boost::enable_shared_from_this<TcpConnection>
{
private:
boost::asio::ip::tcp::socket socket1;
std::string message;
TcpConnection(boost::asio::io_service &io_service) :
socket1(io_service)
{
}
void Writehandler(const boost::system::error_code &errorCode, size_t size)
{
if (!errorCode)
{
Read();
}
std::cout << errorCode.message() << std::endl;
}
public:
typedef boost::shared_ptr<TcpConnection> pointer;
static pointer Create(boost::asio::io_service &io_service)
{
return pointer(new TcpConnection(io_service));
}
boost::asio::ip::tcp::socket &socket()
{
return socket1;
}
void Start()
{
message = GetMessage();
boost::asio::async_write(socket(), boost::asio::buffer(message),
boost::bind(&TcpConnection::Writehandler, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void Read()
{
std::array<char, 65> messages{};
auto self(shared_from_this());
boost::asio::async_read(socket(),
boost::asio::buffer(messages),
[this, self](boost::system::error_code ec, std::size_t /*length*/) {
if (!ec) {
Read();
} else {
std::cout << ec.message() << std::endl;
exit(1);
}
});
}
};
class Server
{
private:
boost::asio::ip::tcp::acceptor acceptor;
public:
Server(boost::asio::io_service &io_service, unsigned short int port)
:
acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
{
startAccept();
}
void startAccept()
{
TcpConnection::pointer newConnection = TcpConnection::Create(acceptor.get_io_service());
acceptor.async_accept(newConnection->socket(),
boost::bind(&Server::Handler, this, newConnection, boost::asio::placeholders::error
));
}
void Handler(TcpConnection::pointer &newConnection, const boost::system::error_code &errorCode)
{
if (!errorCode)
newConnection->Start();
startAccept();
}
};
std::string GetMessage()
{
std::字符串用户(“用户”);
用户+=客户端;
客户端++;
返回用户;
}
类TCP连接
:public boost::从\u启用\u共享\u
{
私人:
boost::asio::ip::tcp::socketsocket1;
std::字符串消息;
TCP连接(boost::asio::io_服务和io_服务):
插座1(io_服务)
{
}
void Writehandler(const boost::system::error\u code&errorCode,size\u t size)
{
如果(!错误代码)
{
Read();
}
std::cout在客户机::启动
功能中,您从未实际连接到任何远程服务器。您只解析远程合作伙伴的地址
或者可能是你想要的
void start()
{
try
{
boost::asio::ip::tcp::resolver resolver(socket1.get_io_service());
boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), port);
boost::asio::ip::tcp::resolver::iterator endpoint = resolver.resolve(query);
boost::asio::connect(socket(), endpoint); //<--- Connect to your server
std::cout << exception.what() << std::endl;
}
catch (const std::exception &e)
{
//Handle
}
catch (const boost::system::system_error &e)
{
//Handle
}
}
void start()
{
尝试
{
boost::asio::ip::tcp::解析器解析器(socket1.get_io_service());
boost::asio::ip::tcp::resolver::query查询(boost::asio::ip::tcp::v4(),端口);
boost::asio::ip::tcp::resolver::iterator endpoint=resolver.resolve(查询);
boost::asio::connect(socket(),endpoint);//代码没有错误。
您实际在哪里使用或?
void start()
{
try
{
boost::asio::ip::tcp::resolver resolver(socket1.get_io_service());
boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), port);
boost::asio::ip::tcp::resolver::iterator endpoint = resolver.resolve(query);
boost::asio::connect(socket(), endpoint); //<--- Connect to your server
std::cout << exception.what() << std::endl;
}
catch (const std::exception &e)
{
//Handle
}
catch (const boost::system::system_error &e)
{
//Handle
}
}