4 Stimmen

C++ Winsock nicht-blockierender/asynchroner UDP-Socket

Ich entwickle einen kleinen Datenprozessor in C++ über UDP-Sockets, und haben einen Thread (nur eine, und getrennt die Sockets), die die Informationen von ihnen empfangen verarbeiten.

Mein Problem tritt auf, wenn ich Informationen von mehreren Clients in der Steckdose zur gleichen Zeit empfangen müssen.

Wie könnte ich so etwas tun?

Socket foo;
/* init socket vars and attribs */
while (serving){
thread_processing(foo_info);
}

für mehrere Clients (viele gleichzeitige Zugriffe) in C++?

Ich benutze winsocks atm auf win32, aber nur Standard blocking udp Sockets arbeiten. Keine GUI, es ist eine Konsolenanwendung. Ich werde so viel ein Beispiel oder Zeiger auf eine zu schätzen wissen ;).

Vielen Dank im Voraus.

1voto

Nikolai Fetissov Punkte 79627

UDP-Socket ist in der Lage, Datagramme von mehreren Clients zu empfangen, die die recvfrom() Funktion. Blockieren Sie einfach beim Empfang, lesen Sie die Anfrage, verarbeiten Sie sie, senden Sie die Antwort, wiederholen Sie. Sie brauchen nicht einmal einen Thread, es sei denn, die Verarbeitung dauert sehr lange (in diesem Fall würde ein Thread funktionieren, der mit zwei Warteschlangen verbunden ist, einer in- und einer out-,).

0voto

Preet Sangha Punkte 62622

Ich würde vorschlagen, dass dieses Problem am besten gelöst wird, indem man die Anfragen in eine Warteschlange stellt und den anderen Thread die Warteschlange abarbeiten lässt. Dadurch wird der Socket-Empfang vom Prozess entkoppelt und Sie können mehr Hörer und Verarbeitungsthreads einrichten, wenn sich Ihre Anforderungen ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X