boost::asio Server nimmt keine Verbindungen an



  • Hey.
    Schreibe grad an einem Server mit boost::asio. Einen funktionierenden Client hab ich schon, aber immer wenn ich connecten will, bekomm ich "Host not found".
    Der Server soll mehrere Verbindungen handlen können und erzeugt für jede neue verbindung ein neues socket und speichert das socket dann in einer list...hier mal der relevante Code...vllt. findet ja wer was 🙂

    net.h

    class net
    {
        public:
            net(int Port);
    
            void AcceptNew();
        private:
            boost::asio::io_service io_service;
            tcp::acceptor acceptor;
    
            tcp::socket * m_socket;
            boost::ptr_list<tcp::socket> SocketPool;
            int m_Port;
    };
    

    net.cpp

    net::net(int Port):
        m_Port(Port),
        acceptor(io_service, tcp::endpoint(tcp::v4(), m_Port))
        {}
    
    void net::AcceptNew()
    {
        m_socket = new tcp::socket(io_service);
        try
        {
            acceptor.accept(*m_socket);
            std::cout << "Client '" << m_socket->remote_endpoint().address().to_string() << "' connected!" << std::endl;
        }
        catch(std::exception &e)
        {
            std::cout << e.what() << std::endl;
        }
        SocketPool.push_back(m_socket);
    }
    

    main.cpp

    int main()
    {
        int Port = 1338;
        net Net(Port);
    
        while(1)//main loop
        {
            Net.AcceptNew();
        }
    }
    


  • Finn schrieb:

    Hey.
    Schreibe grad an einem Server mit boost::asio. Einen funktionierenden Client hab ich schon, aber immer wenn ich connecten will, bekomm ich "Host not found".

    Das deutet doch wohl eher auf einen Fehler bei der Namensauflösung auf der Clientseite hin.



  • Wenn ich aber z.B. mit netcat einen server erstelle, findet es das ohne Probleme und funktioniert. Und umgekehrt, wenn der Server läuft und ich will mit telnet connecten, bekomem ich auch: "Connection refused". Deshalb hab ich ja geschrieben: "Hab einen FUNKTIONEIRENDEN Client"



  • Finn schrieb:

    Wenn ich aber z.B. mit netcat einen server erstelle, findet es das ohne Probleme und funktioniert. Und umgekehrt, wenn der Server läuft und ich will mit telnet connecten, bekomem ich auch: "Connection refused". Deshalb hab ich ja geschrieben: "Hab einen FUNKTIONEIRENDEN Client"

    "host not found" und "connection refused" sind offensichtlich zwei verschiedene Meldungen.



  • Es liegt NICHT am CLIENT. Die beiden Fehlermeldungen laufen aufs gleiche hinaus. Also, wenn du mir helfen willst schau dir lieber mal den server-code an, ob da was nicht passt 🙂



  • Finn schrieb:

    Es liegt NICHT am CLIENT. Die beiden Fehlermeldungen laufen aufs gleiche hinaus. Also, wenn du mir helfen willst schau dir lieber mal den server-code an, ob da was nicht passt 🙂

    Ich bin nicht bereit, jemandem, der sich weigert eine vernünftige Beschreibung seines Problems zu liefern, zu helfen. Mal sehen, ob sich jemand anderes das antut.



  • Ich habe das Problem sehr wohl vernünftig Beschrieben. Mein Problem ist, dass (trotz eines 100% funktionierenden Clients, den ich mehrfach auf seine Funktionalität geprüft habe) der Server anscheinend keine Verbindungen entgegen nimmt. Was ist daran nicht vernünftig beschrieben?



  • Warum nimmst du nicht einen der unzähligen Server-Beispiele der boost und studierst, was du anders machst?



  • Dein Attribut m_Port ist nicht initialisiert. Die Variablen werden in der Reihenfolge initialisiert, in der sie in der Klasse deklariert wurden. Die Reihenfolge in der Initialisierungsliste spielt dabei keine Rolle.

    Also so:

    private:
        boost::asio::io_service io_service;
        int m_Port; //muss vor acceptor kommen!
        tcp::acceptor acceptor;
        tcp::socket * m_socket;
        boost::ptr_list<tcp::socket> SocketPool;
    

    PS: Im Falle einer Exception produzierst Du einen schrottigen Socket.



  • Ach jetzt versteh ich auch immer diese Warnungsmeldungen in denen es heißt: "... will be initialized after!" 😃
    Vielen Dank^^


Anmelden zum Antworten