boost asio rx tx selber socket
-
Hallo zusammen,
ich habe mir folgenden sende und empfangsroutinen mit boost::asio gebaut:
int thr_rx() { try { int port =19000; boost::asio::io_service io_service; boost::system::error_code error; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4),port)); tcp::socket socket(io_service); acceptor.accept(socket); while(true) { ...boost::asio::io_service io_service; boost::asio::ip::tcp::socket socket2(io_service); boost::asio::ip::tcp::endpoint ep_19000( boost::asio::ip::address::from_string("127.0.0.1"),19000); int Transmit() { socket2.connect(ep_19000,ec); ...Jetzt zu meinem Problem die Funktionen funktionieren soweit gut.
Nur das problem ist wenn die tx() etwas sendet, bevor die rx etwas empfangen hat, nämöich dann hört die rx auf ihre eigene TX funktion und schließt sich damit kurz.daher meine frage wie kann ich das verhindern ??
Ich will auf dem selbem Port bleiben.
Außerdem entstehen im moment zwei sockets, was ich eigentlich auch nicht haben will, sollte eigentlich einer seindanke für eure bemühungen Gruß
-
C kennt keine Sockets... das ist wohl etwas ¨ür die WinAPI Gurus und das ganze ist nicht C sondern C++.
-
Binggi schrieb:
C kennt keine Sockets... das ist wohl etwas ¨ür die WinAPI Gurus und das ganze ist nicht C sondern C++.
Sockets sind eine C API zur netzwerk kommunikation. Aber der Thread sollte lieber in den C++ Bereich geschoben werden, da die Boost eine C++ Library Sammlung ist.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum C++ (auch C++0x) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hm hat keiner eine Idee??
Hab heute schon den ganzen Tag damit verbracht und keine Lösung gefunden

-
mein problem ist quasi die
beiden funktionen mit dem selben socket zu starten.z.Z. macht ja jede ihren eigenen auf. Damit kann RX nicht erkennen ob das gerade von TX gesendet worden ist.
Wenn ich versuche der RX bzw. TX einen geöffneten socket zu übergeben
boost::asio::ip::tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(),port)); acceptor.accept(socket2,ec); if (!ec) { thr_rx(socket2); }kommt der error
error C2248: 'boost::noncopyable_::noncopyable::noncopyable' : cannot access private member declared in class 'boost::noncopyable_::noncopyable'also wie kann ich den funktionen den einen eindeutigen verweis oder ein objekt vom socket übergeben.
Dann dann kann ich ja unterscheiden was rx und tx ist.
-
Was ist die Signatur von thr_rx?
-
int thr_rx(boost::asio::ip::tcp::socket socket2);
-
Da würde das socket kopiert, was aber nicht geht, weil es eben noncopyable ist.
Übergib es per Referenz:int thr_rx(boost::asio::ip::tcp::socket& socket2);
-
Ja geht danke für deine Hilfe.
Eigentlich recht simpel, aber ich bin irgendwie so überaupt nicht drauf gekommen.
