Boost ASio Libraryを使用してC++でシンプルなTcpサーバーを作成しようとしています。私は2つのクラスTcpConnectionとTcpServerを書いた。Boost Asio io_service、クライアントからのメッセージを読む
私が必要とする動作は、Tcp Serverが接続されたすべてのクライアントにメッセージを送信でき、クライアントがサーバーに登録/登録解除できる必要があるということです。
私はサーバーからメッセージを送信することができました。私はクライアントからの読書に失敗しました。私のクライアントは、apache minaを使ってjavaで書かれています。
サーバコード
message = message + "\r\n";
const int bytesToSend = message.length();
boost::system::error_code error;
boost::asio::write(socket, boost::asio::buffer(message, bytesToSend), boost::asio::transfer_all(), error);
クライアントコードサーバーメッセージを読むためのコードで
ConnectFuture future = ioConnector.connect(new InetSocketAddress(Port),
new TriggerReceiverHandler();
System.out.println("Message Receiver started and listening on port "+ Port);
IoSession session = future.getSession();
session.write(new String("TEst Message From Client"));
はasync_read
boost::array<char, 1> buf;
boost::asio::async_read(socket, boost::asio::buffer(buf),
boost::bind(&TcpConnection::handleRead, this, buf, boost::asio::placeholders::error));
void TcpConnection::handleRead(boost::array<char, 1> buf, const boost::system::error_code& error)
{
if(!error)
{
std::cout << "Message: " << buf.data() << std::endl;
}
else
{
std::cout << "Error occurred." << std::endl;
}
}
を使用して行われます。しかしhandleReadが呼び出さ取得されていませんクライアントからセッションに書き込むことによってメッセージをトリガーするときです。私が何か悪いことをしているかどうか教えてください。
私は助けていただければ幸いです。さらなる情報が必要な場合はお知らせください。
ありがとうございます。
C++とJavaの両方でサーバーとクライアントを作成して、それらの動作方法を両立させることをお勧めします。 Javaクライアントとサーバーは、お互いに、またC++クライアントとサーバーとも話せるはずです。こうすることで、どちらの端に問題があるかを診断できます。 –