c++ - Boost-ASIO-Netzwerk-server/client

Ich habe ein Programm geschrieben, für client und server. Das Programm verfügt momentan die folgenden:

  1. Server überwacht, um einen Endpunkt für die Verbindung
  2. Client eine Verbindung zum server
  3. server sendet die Nachricht zum akzeptieren einer Verbindung
  4. client empfängt die Nachricht

Ich bin dabei asynchron. Aber, das problem ist, Sie kann nur senden/empfangen einer Nachricht. Danach, Sie einfach zu kündigen. Unten ist mein code:

#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;
}

Ich skalieren möchten dieses Programm so, dass:

  1. server hören können, und der client kann die Anfrage senden, auf unbestimmte Zeit. Mehr wie ein one-way-chat-system.
  2. - server in der Lage, eine Verbindung zu mehreren clients.

Setzen die async_send() und service.run() in einer unendlichen Schleife nicht helfen. Es druckt nur die Nachricht wieder und wieder auf der client-Seite, bis der client beendet wird.

Ich bin Recht neu auf boost::asio sogar network programming. Bitte sagen Sie mir, wo und was sollte ich ändern in meinem code?

InformationsquelleAutor helix | 2017-01-04
Schreibe einen Kommentar