Socket Mehrere Clients

Aruetiise

Aktives Mitglied
Hi
Zu erst einmal, ja ich weiß es gibt schon einen Haufen Beiträge zu dem Thema. Ich wollte mehr Fragen ob ich alles richtig verstanden habe:

Der Server nimmt die Anfrage von Client1 zum Verbinden an.

Es wird ein neuer thread gestartet zur Bearbeitung des Clients(wie muss ich das an die andere Klasse übergeben?)

Und dann kann ein neuer Client (client2, usw...) angenommen werden.

Jetzt habe ich ein paar fragen:

1. Ich dachte jeder Client braut einen eigenen Port
2. Kann ich nicht einfach ein Array erstellen aus mehreren Sockets auf Seiten des Servers der die dann der Reihe nach belegt?


Ich hoffe man kann alles verstehen :D

Julius
 

JuKu

Top Contributor
Der Server nimmt die Anfrage von Client1 zum Verbinden an.
Es wird ein neuer thread gestartet zur Bearbeitung des Clients(wie muss ich das an die andere Klasse übergeben?)

Nein. Nur wenn du ein ganz ineffizientes Programm (mega ineffizient!) schreiben willst, erstellst du für jede Verbindung einen eigenen Thread.
Wenn du viele Verbindungen offen hälst, wird das Programm sogar deinen ganzen Rechner auslasten, da jeder Thread Overhead bedeutet.
Stattdessen solltest du auf Executor Services / Thread Pools zur Bearbeitung setzen!

Nun zu deinen Fragen:
1. Es gibt nur 1 offenen Server Port, aber es gibt auch noch Client Ports. Du verwechselst das also gerade.
Für dich sind aber nur der Server Port relevant, um den Client Port musst du dich normalerweise nicht kümmern.

Auszug aus Wikipedia:
Zu jeder Verbindung dieser beiden Protokolle gehören zwei Ports, je einer auf Seiten des Clients und des Servers.
Quelle: https://de.wikipedia.org/wiki/Port_(Protokoll)
2. Da du nur einen offenen ServerSocket benötigst, hat sich diese Frage damit auch erledigt, oder?

Btw, es gibt Libraries für sowas, z.B. Netty oder vertx.io, die dir diese Arbeit abnehmen.
Da du anscheinend noch nicht so viel mit Networking zu tun hattest, solltest du dich der Einfachheit halber auf Vertx.io konzentrieren.
Ich habe dazu mal ein Tutorial geschrieben, wie man einen Chat Server + Client mit vertx.io in relativ kurzer Zeit realisieren kann:
- Teil 1: http://jukusoft.com/2016/10/26/tutorial-chat-server-java/
- Teil 2: http://jukusoft.com/2016/10/26/tutorial-chat-server-java-teil-2/

Sowohl Netty, als auch vertx.io sind High Performance Networking Libraries, also für sehr viele Verbindungen ausgelegt.
 

Aruetiise

Aktives Mitglied
Hi
erst mal danke für die hilfe. :D
Du den Bibliotheken: eigentlich möchte ich das selber machen... Ich mache das ja nur als "Hobby" und habe irgentwie das Gefühl, wenn ich Libraries benutze, das es nicht mehr meine Leistung ist... KP und hast du irgent eine anleitung oder ähnliches für Executor Services / Thread Pools? Wäre nice suche aber auch nochmal selber.

Julius
 

DrZoidberg

Top Contributor
Einen neuen Thread für jeden Client zu starten ist völlig in Ordnung, solange du maximal ein paar hundert Clients gleichzeitig hast. Bei einem Rechner mit geringer Leistung kann aber auch das schon zu viel sein.
Dazu kannst du dir die beiden Beispiele hier ansehen.
http://www.java2s.com/Tutorials/Java/Java_Network/0010__Java_Network_TCP_Server.htm
http://www.java2s.com/Tutorials/Java/Java_Network/0020__Java_Network_TCP_Client_Socket.htm

Wenn du dagegen sehr viele Clients hast und nicht jedes mal einen neuen Thread erstellen willst und auch keine Bibliotheken (außer der Standard Java API) verwenden willst, gibt es zwei mögliche Wege das zu tun.
non blocking sockets mithilfe von SocketChannels
http://www.java2s.com/Tutorials/Java/Java_Network/0070__Java_Network_Non-Blocking_Socket.htm

und AsynchronousSocketChannel
http://www.java2s.com/Tutorials/Jav...Java_Network_Asynchronous_Socket_Channels.htm

Ein Executor Service ist eine schöne Lösung um rechenintensive Operationen auf mehrere Kerne zu verteilen und so die Leistung der CPU voll auszuschöpfen. Wenn du aber einen Executor Service für die Verwaltung von Clients einsetzt, dann hättest du wieder einen Thread pro Client. Es bringt dir also nicht viel.
 

JuKu

Top Contributor
Du musst die Verbindungs-Thread und die "Worker" Thread trennen.
Also quasi ein Thread Pool verwaltet die Verbindung an sich, der andere kümmert sich um die Abarbeitung der eingetroffenen & gesendeten Nachrichten.

Du den Bibliotheken: eigentlich möchte ich das selber machen... Ich mache das ja nur als "Hobby" und habe irgentwie das Gefühl, wenn ich Libraries benutze, das es nicht mehr meine Leistung ist...

Sobald du ein größeres Projekt hast, wirst du nicht mehr ohne Libraries auskommen, es sei denn du willst seeehr viel Zeit da rein investieren.
Das selbe gilt ja auch fürs Betriebssystem, im Grunde genommen verwendest du jetzt schon eine ganze Menge Libraries im Hintergrund, ohne dass du davon aktiv mitbekommst. Mit dieser Einstellung müsstest du auch auf das OS verzichten und dein eigenes Betriebssystem schreiben, damit es "alleine deine Leistung" ist.
Ich glaube du solltest dich von diesem Gedanken verabschieden. Zumal es heutzutage fast unmöglich ist, etwas größere Softwares alleine ohne Team zu schreiben, es ist dann nicht mehr "deine", sondern "eure" Leistung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Framework mehrere Clients/ Server-Broadcast/oracle XE/ XML Netzwerkprogrammierung 1
V Server / mehrere Clients / MySQL / Konzept Netzwerkprogrammierung 2
Z Socket [Chatprogramm] Mehrere Clients an einen Server Netzwerkprogrammierung 10
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
cedi Socket Mehrere Clients an einem Server Netzwerkprogrammierung 4
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
D Clients sollen mehrere Sessions starten Netzwerkprogrammierung 11
G Nachricht an mehrere Clients schicken Netzwerkprogrammierung 10
G Server an mehrere Clients Netzwerkprogrammierung 15
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
E Mehrere Sockets Netzwerkprogrammierung 2
C Mehrere Spielewelten im Multiplayer Netzwerkprogrammierung 2
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
Creylon Socket Mehrere gleichzeitig eingehende Nachrichten Netzwerkprogrammierung 8
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
G Socket Mehrere Clientanmeldungen am Server Netzwerkprogrammierung 13
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
M Jetty Konfiguration mehrere Handler? Netzwerkprogrammierung 2
F UDP Server - mehrere Pakete auf einmal Netzwerkprogrammierung 12
A Mehrere gleich Packete behandeln Netzwerkprogrammierung 4
R mehrere MySQL-Zugriffe Netzwerkprogrammierung 3
B Paralleler Dateitransfer: Ein Client - Mehrere Sockets? Wie connecten? Netzwerkprogrammierung 16
S Mehrere Attachments mit JavaMail API auslesen Netzwerkprogrammierung 3
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
A Datenverteilung: Mehrere Threads verwenden? Netzwerkprogrammierung 4
T Netzwerkchat Problem: Mehrere Nachrichten ~ Anfängerproblem Netzwerkprogrammierung 3
W Bestimmt IP Adresse verwenden wenn man mehrere hat Netzwerkprogrammierung 5
A Jakarta Commons HTTPClient: Mehrere Requests gleichzeitig Netzwerkprogrammierung 2
R Mehrere Dateien über einen Socket senden Netzwerkprogrammierung 2
L mehrere Streams über einen Socket? Netzwerkprogrammierung 8
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
E Mehrere / bestimmte Netzwerkkarten ansteuern Netzwerkprogrammierung 10
F Mehrere Attachments mit JavaMail API Netzwerkprogrammierung 2
G Proxy und mehrere Verbindungen Netzwerkprogrammierung 4
G Mehrere SSL Verbindungen Netzwerkprogrammierung 2
A Mit Client auf mehrere Server zugreifen Netzwerkprogrammierung 5
M Mehrere Ports gleichzeitig abhören Netzwerkprogrammierung 5
TRunKX Ein Port mehrere Verbindungen? Netzwerkprogrammierung 7
L JavaMail: Automatisches Email Versand (mehrere Empfänger) Netzwerkprogrammierung 4
U Einen HandlerThread, der mehrere Verbindungen verwaltet? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
M Socket Senden an alle verbundenen Clients Netzwerkprogrammierung 3
M Socket Netzwerk Übertragung zwischen 4 Clients Netzwerkprogrammierung 2
G Gui von 2 Clients Synchronisieren Netzwerkprogrammierung 2
F Schulprojekt erweitern - Online Quiz mit mehreren Clients - Was benötige ich ? Netzwerkprogrammierung 0
P Socket Viele Clients bedienen mit Vert.x Netzwerkprogrammierung 9
M MultiClient Server - Senden an alle Clients Netzwerkprogrammierung 8
G Multiple Clients and one Server --> java.lang.NullPointerException Netzwerkprogrammierung 1
M Teilnehmerliste vom Server auch an alle Clients senden Netzwerkprogrammierung 0
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
C Socket Identifikation des clients nach der accept() Methode Netzwerkprogrammierung 2
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
B Socket Liste von clients - multicast Netzwerkprogrammierung 4
M Anzahl Clients aus Start- und Endadr. berechnen Netzwerkprogrammierung 54
R Viele Clients ein Server Netzwerkprogrammierung 8
borobudur Synchronisation von Clients Netzwerkprogrammierung 10
S Socket nach anderen clients im netzwerk suchen Netzwerkprogrammierung 3
L RMI Informationen über die Clients herausfinden Netzwerkprogrammierung 5
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
F Erhalten und Senden von Nachrichten anhand des Indexes des Clients Netzwerkprogrammierung 19
H Hilfe bei multiplen Clients Netzwerkprogrammierung 7
cowabunga1984 Transferierte Datenmenge eines SOAP Clients (JAX-WS) anzeigen Netzwerkprogrammierung 2
T Administration von Software auf Clients im Netzwerk Netzwerkprogrammierung 6
D Netzwerkprobleme bei mehreren Clients Netzwerkprogrammierung 4
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
A Server mit mehreren Clients Netzwerkprogrammierung 2
5 Webservice max. mit 5 Clients möglich Netzwerkprogrammierung 10
M clients untereinander kommunizieren Netzwerkprogrammierung 2
A RMI: Wieviele Clients können sich gleichzeitig anmelden? Netzwerkprogrammierung 34
B Rmi Kommunikation Server zu mehreren Clients? Netzwerkprogrammierung 3
T Am RMI-Server: IP des Clients ermitteln? Netzwerkprogrammierung 2
J SecurityManager - Server-Zugriff nur von bestimmten Clients? Netzwerkprogrammierung 2
T RMI - Probleme beim Starten des Clients Netzwerkprogrammierung 4
T Chat mit mehreren Clients Netzwerkprogrammierung 3
G Anzahl verbundener Clients zu einem FTP-Server ermitteln? Netzwerkprogrammierung 4
D Netzwerk Betrachtung mit vielen Clients Netzwerkprogrammierung 2
G Nachricht von server an alle clients senden Netzwerkprogrammierung 6
I IP Adresse des Clients einer Socket Verbindung Netzwerkprogrammierung 2
S Server mit mehreren Clients Nachrichten austauschen Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben