为什么数据不传输
Why data is not transmitting
我正在尝试设计一个客户端服务器程序,其中双方{server,客户端}都可以与async_connect通信。 这是我的服务器程序代码:
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();
}
};
}
这是我的客户端代码:
class Client
: public boost::enable_shared_from_this<Client>
{
private:
boost::asio::ip::tcp::socket socket1;
std::string port;
public:
Client(boost::asio::io_service &io_service, std::string port)
: port(std::move(port)),
socket1(io_service)
{
start();
}
void handler(const boost::system::error_code &errorCode, size_t size)
{
}
boost::asio::ip::tcp::socket &socket()
{
return socket1;
}
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);
std::cout << exception.what() << std::endl;
}
}
void read()
{
std::array<char, 64> messages{};
boost::asio::async_read(socket(),
boost::asio::buffer(messages.data(), messages.size()),
[this](boost::system::error_code ec, std::size_t /*length*/)
{
if (!ec)
{
read();
} else
{
socket().close();
}
});
}
void write()
{
std::string message{};
getline(std::cin, message, 'n');
boost::asio::async_write(socket(),
boost::asio::buffer(message),
[this](boost::system::error_code ec, std::size_t /*length*/)
{
if (!ec)
{
write();
} else
{
socket().close();
}
});
}
};
代码没有错误。 但是当我连接两个数据时没有注入。
在Client::start
函数中,您从未实际连接到任何远程服务器。您只能解析远程伙伴的地址。
boost::asio::connect
或boost::asio::async_connect
可能是您想要的。
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
}
}
您可能还想用 try 块catch
一些东西。我不确定哪个编译器可以让你这样做。
此外,建议将读取缓冲区创建为类成员。
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 从C++调用 Python 脚本以持续流式传输数据
- 无法从 C++ 中的类正确传输数据
- 如何使用C++通过xbee传输数据?
- 如何通过 UDP 传输数据 (XML)?
- QTcpSocket ready读取信号在传输数据时停止发出
- 如何在"mwArray *"和"mxArray *"之间传输数据?
- 从GPS向SIGFOX传输数据
- 如何在C 中连接两个对象以在它们之间传输数据
- 使用 Win32/WINAPI 通过内存映射文件传输数据
- 蓝牙可以接收数据,但不能传输数据(用C++进行套接字编程以与Matlab通信)
- 实时在语言之间流水线传输或以其他方式传输数据
- 在网络上传输数据
- 如何在TCP端口上实时传输数据期间减少CPU使用率
- 使用Emscripten Worker API传输数据而不进行复制
- 在单声道项目和 C++ 控制台应用之间传输数据
- 是指向在向函数返回值/参数和类请求传输数据期间复制的内存的指针
- 在列表小部件之间传输数据
- r语言 - 如何直接在数据库服务器上运行C++进程以避免传输数据集