Socket Bidirektionale Verbindung mit Sockets

thomas235

Mitglied
Hallo zusammen,

ich bin befasse mich zurzeit etwas mit Netzwerken und habe auch schon das ein oder andere netzbasierte Programm geschrieben.
Ich halte mich dabei immer strikt an das Schema:
Request, Indication, Response, Confirm

also der ClientSocket, der sich aktiv mit dem Server verbindet sendet nur und erhält eine Bestätigung, der vom Serversocket erzeugte ClientSocket empfängt nur und antwortet mit einer Bestätigung.
Meine Frage ist es notwendig, dass ich für bidirektionalen Datenverkehr an beiden Endpunkten einen ServerSocket und 2 ClientSocket Objekte verwalte, oder ist es auch mit nur einem ClientSocket-Paar möglich?

gruß thomas235
 
S

SlaterB

Gast
ein Paar reicht

Bestätigung, Antwort, Senden usw. sind ja keine festen Längen, auch ist die Zahl der ausgetauschten Nachrichten und deren Reihenfolge nicht reglementiert,

vom Parallelbetrieb abgesehen ist ein ServerSocket wie ein klingelndes Telefon,
wenn erstmal auf jeder Seite jemand dran ist und spricht ist es egal, wer eigentlich angerufen hat
 

thomas235

Mitglied
gut, danke schonmal für die Antwort :)

zur Implementierung: wenn beide ClientSockets empfangen sollen, müsste ich dann bei beiden InputStreams "read" aufrufen, um auf Pakete zu warten? Da der Aufruf ja blockierend ist, müsste ich das dann in einem eigenen Thread tun?

gruß thomas235
 

Michael...

Top Contributor
zur Implementierung: wenn beide ClientSockets empfangen sollen, müsste ich dann bei beiden InputStreams "read" aufrufen, um auf Pakete zu warten? Da der Aufruf ja blockierend ist, müsste ich das dann in einem eigenen Thread tun?
Du hast ja jetzt auch schon eine bidirektionale Kommunikation. Und ja "read" ist die einzige Möglichkeit auf Nachrichten des Gegenübers zu hören. Wenn Client und Server abwechselnd oder in fester Reihenfolge mit einander kommunizieren bräuchte man eigentlich keinen Thread zum Lesen der InputStreams. Da das aber selten der Fall ist: Ja, da read blockierend ist muss das Lesen in seperaten Threads passieren.
 

thomas235

Mitglied
Ok, das funktioniert jetzt schonmal soweit, danke :)

eine Frage hätte ich aber gerade noch: ich würde gerne größere Datenmengen übertragen können und habe bemerkt, dass wenn ich die Array-Größe beim read-Aufruf auf ca. 20 limitiere, der Empfänger automatisch mehrere Pakete enthält. Darum wird sich wahrscheinlich TCP kümmern

Was wäre hier eine Standardlösung? Die Socket Bibliothek einfach machen lassen oder das Segmentieren selbst in die Hand nehmen?
Ich glaube die Obergrenze liegt aufgrund der darunterliegenden Netzwerkschicht bei etwas mehr als 4096 Byte

gruß thomas235
 

Kr0e

Gesperrter Benutzer
Die MTU (Maximum Transfer Unit) liegt bei knapp 1500 bytes. Daran solltest du dich nicht halten.

Die Buffergröße kommt auf deine Anforderung an:

Bei Dateitransfers nimm möglichst große Puffer: 64K aufwärts.
Nicht nur die Puffer sind wichtig, sondern auch die Socket Puffer, einzustellen bei den SocketOptions.


DIe Socket Puffergröße gibt an, wieviel Daten geschickt werden, bevor TCP eine Bestätigung verlangt. Dieser Kontextswitch kostet viel im Lan, im Internet erst recht.

Ich würde als allgemeinen Tipp raten: Socketpuffer Send/Recv auf 65536 Bytes setzen,
dazu Nagle-Algorithmus off.

Die Zerlegung der Daten die du sendest, kommt dann auf deine Anforderung an. Bei großen Daten, große Puffer.
 

FArt

Top Contributor
Was wäre hier eine Standardlösung? Die Socket Bibliothek einfach machen lassen oder das Segmentieren selbst in die Hand nehmen?
Ich glaube die Obergrenze liegt aufgrund der darunterliegenden Netzwerkschicht bei etwas mehr als 4096 Byte
gruß thomas235

Baust du hier etwas produktives oder machst du das nur um Erfahrung zu sammeln?
Wenn es um etwas produktives geht, würde ich dir dringend zu einer guten Remoting API raten, wie z.B. Apache Mina oder Netty.
 
T

trööhööt

Gast
Die MTU (Maximum Transfer Unit) liegt bei knapp 1500 bytes. Daran solltest du dich nicht halten.

die MTU liegt nicht nur knapp bei 1500 .. sondern genau auf 1500 ... zumindest bei Ethernet

das was du mit "knapp 1500" bezieht sich sicher auf PPPoE eines DSL-anschlusses ...

PPPoE verwendet ebenfalls Ethernet und unterliegt damit der beschränkung von 1500 / paket ..
da jedoch noch der PPP-header (8 byte) davor gepackt werden muss reduziert sich die nutzlast auf 1492 ...
nimmt man nun noch den TCP/IP header dazu (20 byte) ist man bei PPPoE schon runter auf 1472byte reine nutzdaten ...

bis man dann auf Schicht 7 angekommen ist hat sich durch die ganzen header der nutzdaten-anteil innerhalb eines max 1500byte großen Ethernet-frames stark weiter reduziert ...

weiteres : Maximum Transmission Unit ? Wikipedia
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Verbindung zu Geräten mit gleicher IP aber in unterschiedlichen VLans aufbauen Netzwerkprogrammierung 2
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
IAmFloppy Socket Nachstellen der Verbindung Netzwerkprogrammierung 6
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
S Peer2Peer Verbindung trotz NAT Netzwerkprogrammierung 2
T VPN-Verbindung über Java Netzwerkprogrammierung 4
Aruetiise Socket Verbindung Überprüfen Netzwerkprogrammierung 18
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
S FTP Verbindung zu einem BS2000 Großrechner mit Commons Net Netzwerkprogrammierung 0
F Einfache Socket Verbindung Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
I Swing hängt sich auf bei Verbindung zum Server Netzwerkprogrammierung 3
P RMI Hohe CPU Last RMI Verbindung Netzwerkprogrammierung 4
J Pc - Handy Verbindung? Netzwerkprogrammierung 3
M Socket 2x Proxy multithread-server mit Cross Verbindung Netzwerkprogrammierung 0
T Verbindung zum Server fehlgeschlagen Netzwerkprogrammierung 7
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
N Lan-Verbindung erstellen Netzwerkprogrammierung 2
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V NullPointerException bei Verbindung zu RabbitMQ-Server Netzwerkprogrammierung 4
B FTP commons net verschlüsselte verbindung Netzwerkprogrammierung 11
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
S SVNKit - Verbindung zum Repository trennen? Netzwerkprogrammierung 2
P Socket neuer Client - neue(r) Socket/Verbindung geöffnet? Netzwerkprogrammierung 6
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
X SSH Verbindung zu Remote Datenbank Netzwerkprogrammierung 2
S TCP Verbindung zu Beamer Netzwerkprogrammierung 8
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
D Verbindung zw. zwei Rechnern funzt nicht Netzwerkprogrammierung 5
F Socket Socket Verbindung Netzwerkprogrammierung 10
E Server schließt einfach verbindung? Netzwerkprogrammierung 6
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
X Socket Handy/PC Verbindung unterscheiden Netzwerkprogrammierung 18
O Telnet verbindung Netzwerkprogrammierung 4
Dit_ UDP Verbindung durch Proxy Netzwerkprogrammierung 4
H Socket Client server,verbindung läst sich nicht abbauen&code optimierung Netzwerkprogrammierung 3
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
N Verbindung zu Fritzbox Socket/Telnet ??? Netzwerkprogrammierung 5
multiholle RMI Verbindung Linux <-> Windows Netzwerkprogrammierung 4
S netzwerkprotokoll auf basis einer tcp verbindung erstellen Netzwerkprogrammierung 9
S SSH Verbindung mit j2ssh Netzwerkprogrammierung 3
H Socket Mit Applet Verbindung zu eigener Website aufbauen Netzwerkprogrammierung 4
H Socket Socket verbindung mit einem TeamSpeak2 Server Netzwerkprogrammierung 5
H TCP verbindung hinter NAT Netzwerkprogrammierung 28
G TCP SSL Verbindung Netzwerkprogrammierung 3
P Java / My-Sql Verbindung herstellen Netzwerkprogrammierung 6
W Socket Shellscript über ssh Verbindung aufrufen Netzwerkprogrammierung 14
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
Dit_ UDP-Verbindung, DatagramPakete Netzwerkprogrammierung 3
S Socket verbindung trennen Netzwerkprogrammierung 3
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
musiKk SSL-Verbindung mit Client-Zertifikat (Private Key) scheitert Netzwerkprogrammierung 13
D Socketprogrammierung Verbindung C++=>Java Netzwerkprogrammierung 23
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
T Mac Adresse über Socket Verbindung abfragen? Netzwerkprogrammierung 9
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
M Verbindung über Proxy// Problem mit Outputstream bei URLConn Netzwerkprogrammierung 5
O TCP Socket-Verbindung überprüfen Netzwerkprogrammierung 4
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
F applet verbindung zum server Netzwerkprogrammierung 6
T Verbindung über das Internet Netzwerkprogrammierung 2
G Verbindung zwischen PC und Handy Netzwerkprogrammierung 10
B Bibliothek, um Eckdaten zur Internet-Verbindung rauszufinden Netzwerkprogrammierung 2
C Verbindung zwischen 2 Computern herstellen Netzwerkprogrammierung 12
G USB-Verbindung herstellen Netzwerkprogrammierung 3
O SSH-Verbindung (trilead-ssh2-build212) Netzwerkprogrammierung 2
K Verbindung mit Unix Server aufnehmen Netzwerkprogrammierung 2
J close() Socket Verbindung nötig ? Netzwerkprogrammierung 3
U problem mit verbindung zu einem irc server Netzwerkprogrammierung 3
A WLAN-Verbindung Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben