Ich habe ein paar Zweifel in der Socket-Programmierung. Ich kann meine Daten vom Client zum Server senden und mein Server verarbeitet die Daten. Das o / p der verarbeiteten Daten möchte ich an meinen Kunden zurücksenden. So können wir die Daten mit demselben Socket auf den Client zurückschreiben. Ich meine, ein Server lauscht auf einem Port, bevor er die Verbindung annimmt und Daten empfängt, also muss ich auch meinen Client auf einen anderen Port hören lassen (einen anderen Socket binden) und meinen Server mit diesem Socket verbinden und die Daten zurückübertragen . Jede Art von Beispiel oder Erklärung oder Referenzen wären willkommen. Vielen Dank im Voraus.
Sehen Sie sich zuerst Beejs Netzwerkprogrammierungshandbuch an.
Das grundlegende Drehbuch einer Server / Client-Verbindung lautet wie folgt:
listen()
s an einem festen Port mit einem bestimmten Socket. connect()
s an einen Serverport; Client erhält einen Socket. accept()
s die Verbindung und accept()
gibt einen neuen Socket für die Verbindung zurück. Für die spezifische Verbindung mit dem Client hat der Server write()
s den neuen Socket erhalten, wenn accept()
die eingehende Verbindung erreicht hat. Ein beschäftigter Server wird viele, viele Sockets haben, aber es wird immer nur bind()
zu einem Port brauchen. Alle Verbindungen kommen an diesen einen Port, aber der Netzwerkprotokollstapel des Betriebssystems trennt die Daten und stellt sie am verbindungsspezifischen Socket zur Verfügung.
Sie brauchen keinen neuen Socket.
Ein Socket ist eine Duplex-Verbindung, die Daten in beide Richtungen senden kann. Sie können sogar den Socket aus einer Richtung schließen (wollen nicht mehr schreiben), senden aber trotzdem Daten aus der anderen Richtung.
Ihr Socket ist bidirektional, sodass Sie keinen weiteren Socket erstellen müssen. Sofern Sie keine Middleware wie Pub / Sub verwenden, müssen Sie keinen weiteren Socket erstellen, um die bidirektionale Kommunikation zu ermöglichen.
Technisch ist es richtig, der Socket ist Duplex und Sie können die Daten an den gleichen Socket senden, aus dem Sie gelesen haben:
%Vor%Aber in der Praxis kommt es darauf an, was Sie tun werden. Es ist möglich, Socket auszuhängen, wenn Sie die folgende Situation haben:
Prozess 1 sendet sehr große Daten (& lt; 100K) über den Socket mit einem Send Operation
Prozess 2 empfängt Daten von 1 nach Portionen und sendet kleine Pakete an 1 (~ 20b). Es ist kein
Bestätigungen, aber einige externe Ereignisse. Die Situation geht in Hangout, wo der Sendepuffer der 2 voll ist und es keine Bestätigungen mehr an 1 sendet. 2 und 1 hängen in ihren Sendeoperationen und machen einen Deadlock. In diesem Fall würde ich empfehlen, zwei Sockets zu verwenden. Eine zum Lesen, eine zum Schreiben.
(Späte Antwort, also hauptsächlich für jeden anderen, der hier nach Hilfe sucht)
Ich habe kürzlich eine Client / Server-Beispielanwendung auf den Markt gebracht, die Beejs Leitfaden zur Netzwerkprogrammierung genau befolgt (was auch von Kerrek SB in seiner Antwort empfohlen wurde). Wenn Sie nach einem einfachen Arbeitsbeispiel für die Client / Server-Kommunikation suchen, hilft Ihnen das vielleicht:
Insbesondere, nein, Ihr Client muss keinen separaten abhörenden Socket einrichten, um Daten vom Server zu empfangen - nachdem der Server die Verbindung vom Client akzeptiert hat, kann der Server einfach Daten zurück zum Client senden der gleiche Sockel.
Tags und Links c sockets network-programming