Boost Asio Client
-
Hi zusammen!
Ich habe einen Html Server im Netzwerk, dessen IP und Port(80) bekannt sind.
Ich möchte nun mit Hilfe der Boost -> Asio etwas ganz einfaches tun:
Die Seite index.shtml auslesen.
Ich habe einen endpoint erstellt und dem die IP und den Port übergeben. Die Verbindung war daraufhin offen, und ich konnte sogar die remote IP aus dem Socket auslesen. Aber der "write" ging nicht. Wireshark zeigte garnichts an, auch kein syn, syn/ack, ack.
Mein Ansatz soweit, auch wenn er nicht funktioniert:
IP, port, Befehlsstring;
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket sock(io_service);
boost::array<char, 4096> buffer;
void send(){
// ???
boost::asio::write(sock, boost::asio::buffer("GET /index.shtml HTTP 1.1\r\n"));
// ???
}
Auf dem selben Weg werden später Einstellunngen am Remote-Gerät vorgenommen
"GET cgi...a=l&o=0&i=4".
Ich könnte echt ein bichen Hilfe gebrauchen, den ich finde nichts, ausser Lösungen mit der Thread-ähnlichen Option die Highscore vorschlägt, oder eben mit resovern, die ich nicht bruache, weil ich die IP schon habe. Den Sinn eines query hab ich garnicht geblickt...
Wer hat Licht für men Dunkel?
Chris
-
Wie immer: Zum Nachvollziehen bitte mal ein kompilier- und ausführbares Minimalbeispiel erstellen.
-
Hallo,
wir brauchen schon ein bisschen mehr Kontext und Code.
Ganz wichtig ist z.B., wie und wann wird send() überhaupt aufgerufen?
mfg, NRWsoft
-
Hallo Lalabox,
also ich bin kein Experte für boost::asio, aber kuck dir mal dieses Beispiel an:
http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_client.cppIch vermute laut deiner Beschreibung, dass dir ein connect fehlt...
s.connect(*iterator);EDIT: Ok... Resolve brauchst du ja scheinbar nicht ^^
EDIT: Ups.. Du verwendest ja write
<-- Ich bin wohl nicht ganz wach
EDIT: Aber wie kommst du an sock in deiner send-Funktion?
Laut deinem Code erstellst du sock ja auf dem Stack und socket ist
afaik nicht kopierbar...
EDIT: Außerdem brauchst du laut HTTP-Protokoll (glaub ich) ein weiteres
\r\n, auch wenn das an dieser Stelle noch nicht sooo wichtig istGruß,
XSpille
-
XSpille schrieb:
EDIT: Außerdem brauchst du laut HTTP-Protokoll (glaub ich) ein weiteres \r\n, auch wenn das an dieser Stelle noch nicht sooo wichtig ist
Stimmt, und es ist sogar enorm wichtig! Sonst wartet der Server nämlich minutenlang darauf, dass noch was kommt, schließlich ist die Nachricht noch nicht zuende.
-
Danke xSpille für den Link, ich werden mich heute erstmal durch die examples arbeiten und dann sehen wie es läuft.
Ich hab das irgendwie übersehen, und da gibts auch noch mehr was mir helfen könnte. Vor allem der synchrone http Client wäre was.
(sock.connect(endpoint(IP,Port)...so etwa hab ich das, der iterator ist ja scheibnar eine liste mit möglichen Endpunkten)@fdfdg: da ist ein Beispiel drin mit einem GET ... Aufruf. Ich wüsste gerne mehr dazu, so das wichtigste zu GET..., um es mehr grundlegend zu verstehen. Ich nehme auch gerne links wenn das Basiswissen sein sollte, wirds ja was geben? Was ich an Beschreibungen gefunden habe ist immer nur allgemeines zum http Protokoll, was mir nicht so hilft.
Danke für eure Antworten!Heute Nachmittag mehr...

-
Edit: Wieder mal nicht richtig gelesen
