Sockets & Threads

  • Ersteller Ersteller Thommsan
  • Erstellt am Erstellt am
T

Thommsan

Gast
Hi,

ich habe da ein Problem mit einer Aufgabenstellung. Nehmen wir mal an, ich schreibe ein Programm, welches eingegebenen Text über eine Socket Verbindung versendet, und gleichzeitig in einem separaten Thread empfangene Zeichen von dieser Socket Verbindung annimmt und auf der Konsole ausgibt. Wie realisiert man so etwas theoretisch? Sprich dass beide Threads über dieselbe Verbindung senden, bzw. empfangen.

danke
 
Am besten gar nicht. Socket handles an sich sind nicht thread-sicher. Das heißt, es ist nicht in Ordnung, aus 2 Threads Operationen auf dem gleichen Socket auszuführen - es sei denn, du baust entsprechende Synchronisationsmechanismen (Mutex?) ein, die ein gleichzeitiges Herumwurschteln auf dem selben Socket ausschließen.
Ergänzung ()

Oh Moment, vielleicht habe ich deine Frage mißverstanden. Meintest du, daß jeder Thread ein Ende der Verbindung bedient? Also, daß jeder Thread seinen eigenen Socket hat, der aber jeweils nur zu einem anderen Ende der Verbindung gehört?
 
ja genau so war es eigentlich gedacht... ich war grad schon ein bisschen verwirrt...
 
In dem Falle ist es doch eigentlich ganz trivial. :) Ein Thread ist also der "Server"; also lauscht auf einem vorher mit bind() gebundenem Socket nach eingehenden Verbindungen, nimmt diese dann mit accept() an. Der andere Thread ist der Client, verbindet sich also mit connect() auf die Portnummer, unter der der Server seinen Listenersocket vorher angemeldet hat. Wenn die Verbindung dann steht, kannst du nach Herzenslust mit send() und recv() Daten austauschen.

Die Tatsache, daß du mit 2 Threads arbeitest, ist in diesem Zusammenhang eigentlich völlig Wurscht. Genauso gut könnten es 2 Prozesse sein, die auf völlig anderen Rechnern laufen. Das Prinzip wäre genau das gleiche.

Wie die letztendlichen API-Funktionen dann heißen, hängt natürlich von der verwendeten Sprache / Platform ab.
 
Zurück
Oben