2016-04-12 10 views
2

Ich habe den Client in Javascript geschrieben und es funktioniert super. Server-Code funktioniert auch. Ich weiß jedoch nicht, wie man Nachrichten vom Server an den Client sendet oder wie man eine Verbindung beendet. Weiß jemand, wie man das macht? Auch, da ich ein absoluter Anfänger bin, fehlt mir irgendetwas in meinem Code? Ich habe versucht, es so einfach wie möglich zu halten.So senden Sie Nachrichten mit Websocketpp

#include <iostream> 
#include <websocketpp/config/asio_no_tls.hpp> 
#include <websocketpp/server.hpp> 

typedef websocketpp::server<websocketpp::config::asio> server; 

void on_message(websocketpp::connection_hdl hdl, server::message_ptr msg) 
{ 
    std::cout << "Message received:" << std::endl; 
    std::cout << msg->get_payload() << std::endl; 
} 

int main() 
{ 
    server s; 
    s.set_message_handler(&on_message); 

    s.init_asio(); 
    s.listen(57252); 
    s.start_accept(); 
    std::cout << "Server Started." << std::endl; 
    s.run(); 
} 

Antwort

3

Wenn Sie immer noch mit diesem Code zu kämpfen, gibt es eine weitere große C++ WebSocket Bibliothek hier, die einfacher sein könnten für Sie zu nutzen, dessen Kopf und verwendet nur steigern nur. Es kommt mit Beispielcode und Dokumentation: http://vinniefalco.github.io/

Hier ist ein vollständiges Programm, das eine Nachricht an den Echo-Server sendet:

#include <beast/websocket.hpp> 
#include <beast/buffers_debug.hpp> 
#include <boost/asio.hpp> 
#include <iostream> 
#include <string> 

int main() 
{ 
    // Normal boost::asio setup 
    std::string const host = "echo.websocket.org"; 
    boost::asio::io_service ios; 
    boost::asio::ip::tcp::resolver r(ios); 
    boost::asio::ip::tcp::socket sock(ios); 
    boost::asio::connect(sock, 
     r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"})); 

    using namespace beast::websocket; 

    // WebSocket connect and send message using beast 
    stream<boost::asio::ip::tcp::socket&> ws(sock); 
    ws.handshake(host, "/"); 
    ws.write(boost::asio::buffer("Hello, world!")); 

    // Receive WebSocket message, print and close using beast 
    beast::streambuf sb; 
    opcode op; 
    ws.read(op, sb); 
    ws.close(close_code::normal); 
    std::cout << 
     beast::debug::buffers_to_string(sb.data()) << "\n"; 
} 
0

Ich machte dies eine der Ausgabe Protokolle basiert weg:

  server::connection_ptr con = s.get_con_from_hdl(hdl); 
      std::string resp("BAD"); 
      con->send(resp, websocketpp::frame::opcode::text); 

für alle, die eine binäre Antwort auschecken müssen: https://github.com/zaphoyd/websocketpp/issues/572

Verwandte Themen