我已經編寫了一個客戶端和服務器程序。該程序當前執行以下操作:C++ - Boost ASIO網絡服務器/客戶端
- 服務器偵聽到終點爲
- 客戶端連接到
- 服務器上接受
- 客戶端接收消息
我這樣做是異步的。但是,問題是他們只能發送/接收一條消息。之後,他們只是終止。下面是我的代碼:
#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()
置於無限循環中並沒有幫助。它只是在客戶端反覆打印消息,直到客戶端終止。
我是boost::asio
甚至network programming
相當新。請告訴我在我的代碼中應該修改哪些內容和哪些內容?