wie zu unterscheiden, wenn der client über TCP oder UDP server-Seite
Bin ich mit dem schreiben von einfachen client-server-Programm.
Client-senden Sie einige Nachrichten an server über UDP oder TCP. Server müssen in der Lage sein, um unterstützen sowohl UDP-und TCP.
Wenn client sendet Nachricht, die UDP verwenden, die Reihenfolge der Methodenaufrufe im client ist socket(),bind(),sendto(),recvfrom(),close()
und im server ist socket(),bind(),sendto(),recvfrom(),close()
.
Wenn es verwendet TCP,
Folge von call-in-server
socket(),bind(),listen(),accept(),send(),recv(),close()
.
und dass im client ist
socket(),bind(),connect(),send(),recv(),close()
In meinem Programm, Benutzer/Kunde wird in der Wahl-beginnen Sie, zu wählen, was er verwenden möchten, UDP oder TCP. Also, mein Hauptproblem ist, wie kann ich wissen oder unterscheiden sich in der Seite des Servers, wenn der client das senden der Mitteilung unter Verwendung von TCP oder UDP. Wenn es verwendet TCP, die ich aufrufen muss listen(),accept(),send(),recv()
und wenn es verwendet UDP, ich rufe nicht zu hören(),accept (), aber Aufruf sendto() und recvfrom().
So, wie kann ich unterscheiden/wissen das am Anfang so dass ich die entsprechende Funktion Aufrufe.
Dank.
- Also, sollte ich zwei sockets auf der server-Seite, eine für UDP und eine für TCP ?
- seg.server.Fehler, ja.
- Ich würde empfehlen, nicht aufrufen
bind()
in Ihrem client-code. Es ist zwar technisch möglich (und erforderlich in sehr spezifischen Situationen), ist das Standardverhalten ohne client-Seitebind()
ist in der Regel, was Sie wollen auf der Anwendungsebene. Auch halten Sie im Verstand, die Sie anrufen könnenconnect()
auf einem UDP-socket. Es macht keinen Handshake, aber es bedeutet, dass Sie verwenden könnensend/recv
stattsendto/recvfrom
, die bis Ende Mai machen die client-Logik einfacher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bevor das Paket erreicht Sie, Sie weiß nicht, ob es
UDP
oderTCP
.Du willst also die Bindung an beide
UDP
undTCP
- buchsen wenn Sie erwarten, dass Anfragen in beide Richtungen.Wenn du das getan hast, weißt du, welche Art und Weise kam es durch die Steckdose, die Sie das Paket erhalten hat, durch.
Beim erstellen des Sockets übergeben Sie einen Typ -
SOCK_STREAM
(TCP) oderSOCK_DGRAM
(UDP)So, dass die beiden Arten von Verkehr wird auf zwei verschiedenen Steckdosen.
Nur als Henry Troup wies darauf hin, eine IP-socket ist definiert als
(transport, interface, port).
(UDP 127.0.0.1, 80) ist nicht die gleiche IP-socket als TCP, 127.0.0.1, 80) , so können Sie sicher binden Sie beide und hören Sie für den eingehenden Datenverkehr.
lass mal den TCP-socket lauschen auf port X, und führen Sie die UDP-verbindungen über port Y