私はクライアントとサーバー用のプログラムを作成しました。プログラムは現在、次のん:接続 C++ - ASIOネットワーキングサーバー/クライアントをブーストする
- Serverは、エンドポイントに耳を傾けます
私はこれを非同期で行います。しかし、問題は、彼らは1つのメッセージを送受信しかできないということです。その後、彼らはただ終了する。以下は私のコードです:
#include <iostream> #include <vector> #include<boost/asio.hpp> std::vector<char> buff(256); void SendHandler(boost::system::error_code ex){ std::cout << " do something here" << std::endl; } void ReadHandler(boost::system::error_code ex){ std::cout << " print the buffer data..." << std::endl; std::cout << buff.data() << std::endl; } void Server(){ boost::asio::io_service service; using namespace boost::asio::ip; tcp::endpoint endpoint(tcp::v4(), 4000); tcp::acceptor acceptor(service, endpoint); tcp::socket socket(service); std::cout << "[Server] Waiting for connection" << std::endl; acceptor.accept(socket); std::cout << "[Server] Accepted a connection from client" << std::endl; std::string msg = "Message from server"; socket.async_send(boost::asio::buffer(msg), SendHandler); service.run(); } void Client(){ boost::asio::io_service service; using namespace boost::asio::ip; tcp::endpoint endpoint(address::from_string("127.0.0.1"), 4000); tcp::socket socket(service); std::cout << "[Client] Connecting to server..." << std::endl; socket.connect(endpoint); std::cout << "[Client] Connection successful" << std::endl; socket.async_read_some(boost::asio::buffer(buff), ReadHandler); service.run(); } int main(int argc, char **argv) { if(argc == 1){ std::cout << "Please specify s for server or c for client" << std::endl; return -1; } if(argv[1][0] == 's'){ Server(); } else{ Client(); } return 0; }
私はそのように、このプログラムを拡大したい:サーバが聞くことができ、クライアントが無期限にリクエストを送信することができます
- 。さらに、片方向チャットシステムのようなものです。
- サーバーは複数のクライアントに接続できます。
async_send()
とservice.run()
を無限ループに入れても役に立ちませんでした。これは、クライアントが終了するまでクライアント側でメッセージを何度も表示するだけです。私も
network programming
へboost::asio
にかなり新しいです。私のコードでどこで何を修正すべきか教えてください。