Gleicher Port für Senden und Empfangen ?

Mondlichtung

Mitglied
Hallo liebe Community :)

Grundlegende Frage:
Angenommen man benutzt ein ServerSocket mit Port 555 zum Empfangen von Daten innerhalb eines Servers (z.B. in einer while(true) Schleife). Darf man dann, beispielsweise in einem anderen Thread, gleichzeitig ein Socket ebenfalls mit Port 555 öffnen, um Daten zu senden ?

Könnte es dann zu Komplikationen kommen oder dies eine legitime Vorgehensweise?

Dankeschön,
Mondlichtung
 

eRaaaa

Top Contributor
Wozu sollte man das tun wollen? Probiers doch mal aus, dann wirst du sehen ob du einen neuen Socket mit dem gleichen Port aufmachen kannst. Oder du liest dich in das Thema nochmal ein :D
 

Mondlichtung

Mitglied
Ausprobiert habe ich es noch nicht.
Der Nutzen liegt auf der Hand: Der Server muss nur einen Port benutzen für Senden und Empfangen.

Aus deiner Antwort schließe ich jedoch indirekt, dass Java dies wohl nicht zulässt. Und vermutlich einen Fehler wirft ?
 
G

Gast2

Gast
Java ist hier nicht das Problem. Du kannst einen Port nicht mehrfach verwenden, das lässt das Betriebssystem nicht zu.
 

XHelp

Top Contributor
Das hat nichts mit Java zu tun, sondern mit Sockets an sich.
Den von dir genannten Nutzen kann ich allerdings nicht nachvollziehen. Eine Socketverbindung ist ohnehin bidirektional, also kannst du da sowohl senden als auch empfangen. Aber wozu eine 2. aufmachen ist mir rätselhaft: bei 65k Ports werden ja wohl noch ein paar frei sein. Außerdem brauchst du dich beim Client-Socket nur um den Server-Port zu kümmern.

Oooder du meinst es so:
Kann man sich zu einem ServerSocket, der auf Port 553 lauscht, mit mehreren ClinetSockets verbinden: Das kommt ganz darauf an wie du es implementiert hast, aber theoretisch: ja, das geht. Siehst du ja jedes mal wenn du
Code:
google.de
eintippst.
 

Mondlichtung

Mitglied
Java ist hier nicht das Problem. Du kannst einen Port nicht mehrfach verwenden, das lässt das Betriebssystem nicht zu.

Das würde ich gerne noch einmal genauer unterscheiden.
Ein Socket besteht ja im Wesentlichen aus dem Tupel (local IP, local port, remote IP, remote port).

Ich schätze es ist nicht möglich zweimal ein Objekt mit den gleichen Parametern zu benutzen. Also zweimal ein Objekt der Klasse Socket mit (1.1.1.1, 444, 2.2.2.2, 555).

Ist es jedoch möglich zwei Objekte der Klasse Socket mit den Parametern
(1.1.1.1, 444, 2.2.2.2, 555) und (1.1.1.1, 444, 2.2.2.2, 556) zu haben?
Hier würde ein Server z.B. zwei TCP Verbindungen mit zwei unterschiedlichen Programmen am host 2.2.2.2. betreiben. Ist das möglich?
 

Mondlichtung

Mitglied
Das hat nichts mit Java zu tun, sondern mit Sockets an sich.
Den von dir genannten Nutzen kann ich allerdings nicht nachvollziehen. Eine Socketverbindung ist ohnehin bidirektional, also kannst du da sowohl senden als auch empfangen. Aber wozu eine 2. aufmachen ist mir rätselhaft: bei 65k Ports werden ja wohl noch ein paar frei sein. Außerdem brauchst du dich beim Client-Socket nur um den Server-Port zu kümmern.

Oooder du meinst es so:
Kann man sich zu einem ServerSocket, der auf Port 553 lauscht, mit mehreren ClinetSockets verbinden: Das kommt ganz darauf an wie du es implementiert hast, aber theoretisch: ja, das geht. Siehst du ja jedes mal wenn du
Code:
google.de
eintippst.

Zweites ist das, was mich interessiert.
Einfaches Beispiel:
Java:
while (true) { 
  try { 
    Socket s = server.accept(); 
    new ConnectionHandler(s); 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } 
}
Lauscht der Server z.B. auf 555 und wird ein Request akzeptiert. So hat das resultierende Socket s ja das Tupel (server ip, 555 (server port), remote ip, remote port).
Akzeptiert er kurz darauf erneut eine Anfrage (und läuft die 1. Anfrage in einem eigenen Thread im Hintergrund). Dann hat man, wenn ich es richtig verstehe, ein zweites Socket mit (server ip, 555 (server port), remote ip, remote port).
Ist das soweit korrekt und auch in der Praxis angewendet?
 
G

Gast2

Gast
Lauscht der Server z.B. auf 555 und wird ein Request akzeptiert. So hat das resultierende Socket s ja das Tupel (server ip, 555 (server port), remote ip, remote port).
Akzeptiert er kurz darauf erneut eine Anfrage (und läuft die 1. Anfrage in einem eigenen Thread im Hintergrund). Dann hat man, wenn ich es richtig verstehe, ein zweites Socket mit (server ip, 555 (server port), remote ip, remote port).
Ist das soweit korrekt und auch in der Praxis angewendet?

Der ServerSocket horcht immer auf Port 555. Wenn dann allerdings ne Verbindungsanfrage von nem Client kommt, wird nen anderer Port ausgehandelt, der dann für den Datenaustausch genutzt wird.
Ein Port kann nicht mehrfach benutzt werden!

Das lässt sich ganz einfach mal zeigen:
Der Server:
Java:
		ServerSocket ss = new ServerSocket(5555);

		while (true) {
			Socket s = ss.accept();
		}
Der Client:
Java:
		while (true) {
			Thread.sleep(1000);
			Socket s = new Socket("localhost", 5555);
			System.out.println(s.getLocalPort());
		}
Soviel sei verraten, es wird nicht 5555 ausgegeben ;)
Der Server hat also auf Port 5555 nen ServerSocket der auf Verbindungen wartet. Der komplette Datenaustausch zwischen Client und Server verläuft aber auf ganz anderen Ports (irgendwo weit oben).
Falls du Wireshark hast kannst du dir da auch mal nen kleinen Mitschnitt anschauen.
 
I

irgendjemand

Gast
@TO
ich verstehe weder deine fragen noch deine probleme

1) serversocket
wenn dein rechner *gleich ob java oder sonstwas* auf einem bestimmten port auf verbindungen wartet ist dieser gesperrt ...
du kannst also nie zwei serversockets auf dem selben port aufmachen ...

2) socket-accept
falsch
wenn dein serversocket eine verbindung annimmt so wird ein port ausgehandelt *weit oberhalb von 40k* und über diesen die kommunikation fortgesetzt ...
heißt also : der port auf dem server über den die verbindung mit dem client läuft ist NICHT gleich dem port des serversockets

3) socket-connect
wenn du einen serversocket auf einem port laufen hast hindert dich das doch nicht daran eine verbindung zu einem anderen rechner aufzubauen der den selben serversocket-port hat ...
wie gesagt : die eigentlichen ports über die die verbindung läuft liegen weit oberhalb von 40k ...
 
T

t_fuchs005

Gast
2) socket-accept
falsch
wenn dein serversocket eine verbindung annimmt so wird ein port ausgehandelt *weit oberhalb von 40k* und über diesen die kommunikation fortgesetzt ...
heißt also : der port auf dem server über den die verbindung mit dem client läuft ist NICHT gleich dem port des serversockets

Das stimmt so nicht... Der Server handelt seine Verbindung über den Port, auf dem er lauscht. Auf der Client-Seite wird eine Portnummer >= 1023 ausgewählt.
Falls mehrere Verbindungen auf den gleichen Server-Port bestehen (von einem Client), dann werden die Verbindungen anhand des Source-Port unterschieden.
Falls ein weiterer Client (zufällig) den gleichen Source-Port verwendet, wird die Verbindung anhand der unterschiedlichen IP-Adressen unterschieden.
 

HoaX

Top Contributor
2) socket-accept
falsch
wenn dein serversocket eine verbindung annimmt so wird ein port ausgehandelt *weit oberhalb von 40k* und über diesen die kommunikation fortgesetzt ...
heißt also : der port auf dem server über den die verbindung mit dem client läuft ist NICHT gleich dem port des serversockets

3) socket-connect
wenn du einen serversocket auf einem port laufen hast hindert dich das doch nicht daran eine verbindung zu einem anderen rechner aufzubauen der den selben serversocket-port hat ...
wie gesagt : die eigentlichen ports über die die verbindung läuft liegen weit oberhalb von 40k ...

Nö, was du erzählst ist falsch. Der Client verbindet z.B. zu Port 80 bei Google.de. Und wenn der Server antwortet ist sein Quellport auch Port 80.
Der einzige Punkt an dem dynamisch ein Port gewählt wird ist auf der Clientseite, wenn dieser seinen Socket nicht explizit an einen lokalen Port bindet und dann eine Verbindung herstellt.
 
T

tuxedo

Gast
Kopfschüttel... :noe: Was hier so alles "erzählt" wird lässt es einem kalt den Rücken runterlaufen. :shock:

Zur Aussage "wenn dein serversocket eine verbindung annimmt so wird ein port ausgehandelt *weit oberhalb von 40k* und über diesen die kommunikation fortgesetzt ...":

:autsch: :autsch:
Dann würde Portforwarding nicht wirklich gut funktionieren und SIMON wäre nicht wirklch benutzbar über's Internet.

Kann HoaX und t_fuchs005 nur zustimmen. Der Serversocket-Port ist und bleibt gleich, und nur dieser wird benutzt und sollte in einer Firewall bzw. Portforwarding-Liste eingetragen werden... --> :rtfm:

- Alex
 

Spamkiller

Mitglied
So ich hab mich auch mal eingelesen.
Hier wird von vielen Leuten etwas gesagt und nichts ist 100% richtig.

@Mondlichtung:
Es ist wirklich wichtig, dass du dich vorher in das Thema einliest. 98% deines Problems löst du damit und merkst auch wahrscheinlich wo dein Denkfehler liegt.

Zweitens: Überleg genau was du tun willst. Bei dem folgenden Code stehen mir die Haare zu Berge:

Java:
while (true) { 
  try { 
    Socket s = server.accept(); 
    new ConnectionHandler(s);   //Was ist das? Du lässt die Instanz hier ins "Leere" laufen. 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } 
}


Und das hier ist auch nicht richtig. Ich hab mich geschüttelt beim Lesen:


Kopfschüttel... :noe: Was hier so alles "erzählt" wird lässt es einem kalt den Rücken runterlaufen. :shock:

Zur Aussage "wenn dein serversocket eine verbindung annimmt so wird ein port ausgehandelt *weit oberhalb von 40k* und über diesen die kommunikation fortgesetzt ...":

:autsch: :autsch:
Dann würde Portforwarding nicht wirklich gut funktionieren und SIMON wäre nicht wirklch benutzbar über's Internet.

Kann HoaX und t_fuchs005 nur zustimmen. Der Serversocket-Port ist und bleibt gleich, und nur dieser wird benutzt und sollte in einer Firewall bzw. Portforwarding-Liste eingetragen werden... --> :rtfm:

- Alex

Hier stimmt zumindest 50%. Natürlich wird ein neuer Port ausgehandelt und zwar auf der Client-Seite. Der Server akzeptiert Verbindungen auf Port X. Den musst du Forwarden.
Der Client kommuniziert aber auf einem unbekannten Port der ausgehandelt wird wenn die Verbindung aufgebaut wird. Den musst du nicht forwarden und genau deshalb mach Portforwarding auch Sinn :)
 
T

tuxedo

Gast
@Spamkiller:

jetzt geht's hier die ganze Zeit um "Ports merfach verwenden" und um Serversockets. Und dann kommst du mit Client-Ports daher... :eek:
Na klar werden die (in der Regel) vom Client beim Verbindungsaufbau mit dem Server vom OS gewählt.
Ich dachte nur - um die Sache nicht noch mehr zu verkomplizieren - bleib' ich mit meiner Erklärung beim bisherigen Thema (Port doppelt auf Serverseite) und weite es nicht noch weiter aus....

Aber wo wir gerade bei "mich Schüttelt's beim lesen" sind :shock:

Der Client-Port kann auch fest vorgegeben werden, womit er dann bekannt ist. Dann ist nix mit dynamischer Aushandlung. Nur sollte man das eher nicht tun und die Sache i.d.R. dem OS überlassen.

Summa sumarum: Ich hatte 100% recht. Nur bin ich bei den akuten 50% der Themengebiets geblieben und hab's nicht auf 100% ausgeweitet. Und letzten endes hattest du zu 50% recht :D

Den musst du nicht forwarden und genau deshalb mach Portforwarding auch Sinn

Die Nicht-Notwendigkeit der Portweiterleitung des Clientports ist nicht der Grund für den Sinn des Portforwardins an sich --> :rtfm: --> Portweiterleitung ? Wikipedia
 

Spamkiller

Mitglied
Um Gottes Willen, ich wollte mir hier auch nicht anmaßen alles 100% richtig zu machen.

Wenn du nochmal genau deinen Post liest, wirst du feststellen, dass du die ganze Sache auch nicht einfach halten wolltest. Du hast immerhin mit Port-Forwarding und Firewall angefangen.

Das Einzige was ich damit etwas nachdrücklicher sagen wollte ist der Punkt, dass man sich in eine solche Thematik besser einliest bevor man direkt anfängt zu codieren.

Dass du jetzt so beleidigt deswegen bist, war keine Absicht! :)
 
T

tuxedo

Gast
Seh ich aus als wäre ich beleidigt?

Um Gottes Willen, ich wollte mir hier auch nicht anmaßen alles 100% richtig zu machen.

Wie soll man das verstehen? Auf der einen Seite nicht alles 100% richtig machen wollen, auf der anderen Seite "behaupten" meine Aussage wäre nicht 100% richtig.... ???:L
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Verbindung zu Geräten mit gleicher IP aber in unterschiedlichen VLans aufbauen Netzwerkprogrammierung 2
JavaDevOp Socket Status von UDP-Port prüfen (PortUnreachableException funktioniert nicht?) Netzwerkprogrammierung 32
FrankenDerStein Socket UDP Multithreading für ein Port Netzwerkprogrammierung 2
T multithreaded multiport socketListener beendet TCP-Port-Listening Netzwerkprogrammierung 16
C Proxy Server - Antwort auf welchem Port Netzwerkprogrammierung 1
precoc Port Listener Netzwerkprogrammierung 2
T Port forwarding Netzwerkprogrammierung 11
Rudolf Socket An welchen Port sendet ein Mailserver zu einem anderen Mailserver Netzwerkprogrammierung 8
C Socket Connection refused bei Internetverbindung - Welcher Port? Netzwerkprogrammierung 5
S Port abhören Netzwerkprogrammierung 11
Dit_ UDP Port testen | Ping Google? Netzwerkprogrammierung 7
J Port lauschen Netzwerkprogrammierung 2
D Weiterer Thread auf Port 843 horcht Netzwerkprogrammierung 7
H Mysql port forwarding Netzwerkprogrammierung 5
Dit_ UDP Port bestimmen | Windows, MAC, Linux... Netzwerkprogrammierung 2
J UDP port packete lesen,wenn dieser besetzt ist Netzwerkprogrammierung 3
T Java Mail port ändern Netzwerkprogrammierung 4
1 Socket Immer offener Port? Netzwerkprogrammierung 11
R wie prüfe ich ob ein port frei is ? Netzwerkprogrammierung 7
S Port auf einer bestimmten IP-Adresse auslesen? Netzwerkprogrammierung 6
X Port scannen/schicken Netzwerkprogrammierung 4
W scan remote UDP port Netzwerkprogrammierung 6
M Socket Herausfinden ob server auf port läuft Netzwerkprogrammierung 8
F UDP Receive und Send am gleichen Port Netzwerkprogrammierung 3
G Port freigeben Netzwerkprogrammierung 3
P Sockets +Port Forwarding = Chaos Netzwerkprogrammierung 4
J GSM Modem an Serial Port ansteuern (AT commands) Netzwerkprogrammierung 2
T Server ohne Port Netzwerkprogrammierung 4
Schandro Herausfinden ob hinter einem Port bereits ein ServerSocket steckt Netzwerkprogrammierung 2
ABstraCT Applet multipler port Zugriff möglich ? Netzwerkprogrammierung 5
ABstraCT Telnet port Zugriff problem (public IP) Netzwerkprogrammierung 12
T ohne Port Freigabe. Netzwerkprogrammierung 6
K Problem mit Com-Port-Komunikation Netzwerkprogrammierung 57
G "Port already in use" RMI über SSL Netzwerkprogrammierung 9
S port lauschen Netzwerkprogrammierung 2
feuervogel Sockets - Lokalen Port aber nicht IP bestimmen Netzwerkprogrammierung 3
G port scanner Netzwerkprogrammierung 6
S Port mithören Netzwerkprogrammierung 9
P jakarta.HttpClient: Port bei GetMethod angeben Netzwerkprogrammierung 3
A port noch belegt Netzwerkprogrammierung 3
K Port 13 nur einmal abfragbar? Netzwerkprogrammierung 2
R Problem mit mehreren Anfragen auf demselben Port Netzwerkprogrammierung 2
TRunKX Ein Port mehrere Verbindungen? Netzwerkprogrammierung 7
H Port abhören Netzwerkprogrammierung 3
F freien Port finden Netzwerkprogrammierung 7
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
T PORT 80 überwachen Netzwerkprogrammierung 12
G an port lauschen Netzwerkprogrammierung 10
K nicht physikalische com port ansprechen ? Netzwerkprogrammierung 3
S SSLSocketFactory.createSocket(String hostname, int port),wo? Netzwerkprogrammierung 5
G Port belegt nach Server restart Netzwerkprogrammierung 5
R Port trotz aktiver Firewall nutzen ! Netzwerkprogrammierung 9
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
B Webview für Anwendung Netzwerkprogrammierung 7
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
J Netty umsetzung für ein Protokoll Netzwerkprogrammierung 1
J ERM für kleine Verwaltungsdatenbank Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
Messoras Launcher für mein Spiel Netzwerkprogrammierung 7
F Einfaches Gateway für Log-Files Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T FTP Wie Notwendigkeit für "rekey" klientenseitig detektieren? Netzwerkprogrammierung 3
S Webserver für Jar File Netzwerkprogrammierung 4
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
M Erreichbar für alle zu sein Netzwerkprogrammierung 9
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
T uberspace.de als (v)root-Ersatz für kleinere Java-Anwendungen? Netzwerkprogrammierung 12
L Proxy für Dateidownload? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Leitstelle für Funkspiel Netzwerkprogrammierung 8
F Java-Beispielcode für Zeroconf (ähnlich Apple Bonjour) Netzwerkprogrammierung 7
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
N RMI Einstellungen für "übers Internet" Netzwerkprogrammierung 8
F SSL-Zertifikate für viele Nutzer? Netzwerkprogrammierung 8
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
S wie stell man die classpath für JARs? Netzwerkprogrammierung 3
M Bestimmte Klassen für Netzwerkchecks gesucht Netzwerkprogrammierung 11
M ClassLoader für Axis2 setzen Netzwerkprogrammierung 15
M Welches Speicherformat für News-Database?? Netzwerkprogrammierung 2
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
P Proxy für Anwendung setzten Netzwerkprogrammierung 3
T Bezeichner "end of line" für die Funktion readline Netzwerkprogrammierung 5
A DataGramsocket Übertragungsproblem im Internet (IPs für Voip) Netzwerkprogrammierung 5
E Userliste für Chat Applet Netzwerkprogrammierung 4
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
F Netzwerkprogrammierung für Anfänger Netzwerkprogrammierung 2
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
B Variablen ausrichten für Übertragung Netzwerkprogrammierung 2
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben