asio mehrere anfragen
-
wie kann ich mit asio mehrere anfragen erlauben?
Mit folgendem Code:#include <boost/asio.hpp> #include <boost/array.hpp> #include <string> boost::asio::io_service io_service; boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 80); boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint); boost::asio::ip::tcp::socket sock(io_service); std::string data = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!"; boost::array<char, 4096> buffer; void write_handler(const boost::system::error_code &ec, std::size_t bytes_transferred) { //std::cout<<sock.read_some(boost::asio::buffer(buffer), read_handler); } void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred){ std::cout << std::string(buffer.data(), bytes_transferred) << std::endl; } void accept_handler(const boost::system::error_code &ec) { if (!ec) { boost::asio::async_write(sock, boost::asio::buffer(data), write_handler); sock.async_read_some(boost::asio::buffer(buffer), read_handler); } } int main() { acceptor.listen(); acceptor.async_accept(sock, accept_handler); io_service.run(); } }fährt der server sofort runter, obald mein client seine daten gesaugt hat.
ich hab schon einiges gegoogelt und probiert, aber ich komm einfach nicht drauf.wie kann ich den server nach der ersten anfrage aufrechterhalten?
-
Im accept_handler(..) musst Du einfach wieder async_accept(..) auf dem acceptor aufrufen (ausser natürlich es ist ein Error aufgetreten).
-
Meinst du so?
das klappt nämlich nicht.¨#include <boost/asio.hpp> #include <boost/array.hpp> #include <string> boost::asio::io_service io_service; boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 80); boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint); boost::asio::ip::tcp::socket sock(io_service); std::string data = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!"; boost::array<char, 4096> buffer; void write_handler(const boost::system::error_code &ec, std::size_t bytes_transferred) { //std::cout<<sock.read_some(boost::asio::buffer(buffer), read_handler); } void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred){ std::cout << std::string(buffer.data(), bytes_transferred) << std::endl; } void accept_handler(const boost::system::error_code &ec) { if (!ec) { boost::asio::async_write(sock, boost::asio::buffer(data), write_handler); sock.async_read_some(boost::asio::buffer(buffer), read_handler); acceptor.async_accept(sock, accept_handler); } } int main() { acceptor.listen(); acceptor.async_accept(sock, accept_handler); io_service.run(); }
-
nicht beachten
-
genau so
-
ja aber es klappt doch nicht.
-
alterbro schrieb:
ja aber es klappt doch nicht.
Aha, und wo klemmts? Debugger benutzt?
-
Mein Gott, schau dir einfach die Tutorials an.
Dein Accept Handler hat kein Socket Parameter.
-
welche tutorials?
und was meinst du damit?
-
aso die asio, ja ich bastel grad ein wenig damit rum aber wenn ich folgenden code nehm
http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html
und den port in 80 ändere kann firefox manchmal darauf zugraiefen, manchamal gibts nen ladefehler, woran liegt das?
-
alterbro schrieb:
aso die asio, ja ich bastel grad ein wenig damit rum aber wenn ich folgenden code nehm
http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html
und den port in 80 ändere kann firefox manchmal darauf zugraiefen, manchamal gibts nen ladefehler, woran liegt das?
Was heisst denn "Ladefehler"?
-
-
ist mein laptop einfach zu schwach?
-
alterbro schrieb:
ist mein laptop einfach zu schwach?
Nein, vermutlich nicht. Hast Du eine Firewall, oder ähnliches SIcherheitszeugs auf der Kiste drauf?
-
alterbro schrieb:
ist mein laptop einfach zu schwach?
Jetzt tipppe ich doch langsam mal auf Troll...

-
theta schrieb:
alterbro schrieb:
ist mein laptop einfach zu schwach?
Jetzt tipppe ich doch langsam mal auf Troll...

Ich denke nicht. Er hat schon im Subforum "Webzeugs" Fragen gestellt, und ich denke mal, dass er es schon ernst meint. Das Problem ist, dass asio nicht gerade die intuitivste boost-Bibliothek ist, und die Doku nicht garde dazu beträgt, das Verständnis zu verbessern.
Wenn man damit anfängt zumzuspielen, bevor man halbwegs fit in den Socket-Grundlagen ist, dann passiert sowas.
-
nein, ich hab kruz alle sicherheitsfunktionen deaktiviert, aber immer noch kein stabiles signal
-
vielleicht sollte ich hinzufügen: mit dem asoi client habeich durchgehend stabiles signal, liegts vielleicht nur am firefox?
-
igoniriert ihr mich, weil ich die frage dumm ist?
-
hmm.. ja, hat was..

Also, falls Du mit Signal "Daten empfangen" meinst könnte das an deinem Code liegen. Und zwar musst Du async_read_some(..) solange aufrufen bis Du alle benötigten Daten empfangen hast. In deinem read_handler(..) würdest du ja schön sehen falls nicht alle Daten in einem async_read_some(..) Aufruf empfangen wurden.
-
also mit async read some alle daten von firefox einfangen?
ok, ich versuchs mal, meld mich dann wieder danke, und ja es stimmt ich bin netztwerk programmierung ein anfänger, aber ich find die fehlenden tutorials tragen auch einwenig schuld.