Socket Kommunikation

izoards

Bekanntes Mitglied
Hallo,

Ich lasse ein Socket Server auf einem Raspberry pi laufen.
Im Construktor erwarte ich eine identifikation, nur dann wird die Verbindung hergestellt.
Leider musste ich feststellen, dass sich viele fremde IP‘s verbinden möchte, die meisten kann ich so nach der falscheingabe direkt schliessen.

Jedoch gibt es einige, die sich verbinden und nichts senden, somit blockiert das mein Server.
Nun wollte ich dies mit einem Timeout lösen, leidr gilt das timeout dann global.

Mein Ziel wäre, nur beim ersten lesen ein timeout einzubauen.
Muss ich das über einen zweiten thread machen?
Oder was ist das einfachste?

Danke für die Hilfe
 

Jw456

Top Contributor
Wenn sich mehrere Clains verbinden können sollen solltest du jeden Verbindung in einen Thread halten. Sonnst ist der Server belegt.
 

KonradN

Super-Moderator
Mitarbeiter
Also generell ist zu empfehlen, die neuen Channel aus dem nio Package zu nutzen.

Jeder Client ein Thread ist bei vielen Clients extrem suboptimal!
 

KonradN

Super-Moderator
Mitarbeiter
Bis Project Loom fertig ist :)
Wird das so Probleme lösen? Ich habe mich da noch nicht im Detail mit beschäftigt.

Das Problem ist doch generell, dass man auch bei "virtuellen Threads" diese verwalten muss incl. Locks und Umschalten. Das mag dann zwar eine Besserung bringen, aber ob und wie dies Probleme wirklich löst? Ich selbst sehe das relativ skeptisch.

Da ist es eher Erfolgversprechend, wenn man bei der sync API versucht, so viele Blocks wie möglich zu verhindern (Das geht relativ gut - meine Tests sahen da sehr vielversprechend aus! Habe ich aber nur relativ kurz angetestet). Der Call, Verbindungen anzunehmen, blockiert immer - das ist also ein Thread. Beim lesen prüft man erst, ob und wieviel da ist und liest dann -> Lesen Blockiert nicht! Schreiben wird dann noch einmal kritisch - da hat man so erst einmal zu wenig Kontrolle über die zugrunde liegenden Buffer fand ich. Aber da kann man mit einem Threadpool arbeiten wobei ein Thread nur blockierte Worker abhandelt und die blockierte Verbindung schließt. Das endet auch der blockierte Thread.

Aber es wird schnell deutlich: Das ist unnötiger Aufwand / hohe Komplexität. Dazu haben wir ja die Channel bekommen mit Java 7 (??).

Gibt es in Java Kreisen eigentlich Diskussionen, das async / await einzuführen, das ja in immer mehr Sprachen Einzug gefunden hat? Da habe ich so auf Anhieb nichts zu gefunden....
 

Flown

Administrator
Mitarbeiter
Das Problem ist doch generell, dass man auch bei "virtuellen Threads" diese verwalten muss incl. Locks und Umschalten. Das mag dann zwar eine Besserung bringen, aber ob und wie dies Probleme wirklich löst? Ich selbst sehe das relativ skeptisch.
Ja wird es. Siehe ein sehr gutes Beispiel: Vert.X (sorry war vorher Jetty)
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Kannst Du das erläutern? Jetty nutzt ja keine blockierenden Calls mit vielen Threads sondern nutzt auch die Channel. So verstehe ich zumindest
Ja sorry... Ich hab mich vertan .... ich meinte natürlich Vert.x ... das ist auch die Engine unter Quarkus und die hat eben statt Thread/Request selbst "virtuelle" Threads gebastelt in einer Eventloop.
Auf der Seite sieht man sogar wie "idle" time reduziert wird. Und wir in der Arbeit merken schon den Unterschied, wenn man von OpenShift die MilliCores und Threadpools reduzieren kann, wenn man von EAP -> Quarkus geht (Real-Life Beipsiel aus eigener Erfahrung).
 

izoards

Bekanntes Mitglied

Das habe ich bereits versucht, das timeout kommt dann aber immer.. also bei mir läuft halt nicht viel traffic, d.h. Wenn ich mit dem timeout arbeite, wird dieses immer wieder kommen, solange keine kommunikation läuft, ich möchte das aber nur beim ersten mal. Und habe nicht gefunden, wie ich das timeout wieder „löschen“ kann…
Die clients haben einen eigenen Thread..
 

Oneixee5

Top Contributor
Gibt es in Java Kreisen eigentlich Diskussionen, das async / await einzuführen, das ja in immer mehr Sprachen Einzug gefunden hat? Da habe ich so auf Anhieb nichts zu gefunden....
Electronic Arts hat dafür eine API rausgebracht:
Java:
<!-- https://mvnrepository.com/artifact/com.ea.async/ea-async -->
<dependency>
    <groupId>com.ea.async</groupId>
    <artifactId>ea-async</artifactId>
    <version>1.2.3</version>
</dependency>
 

mrBrown

Super-Moderator
Mitarbeiter
Gibt es in Java Kreisen eigentlich Diskussionen, das async / await einzuführen, das ja in immer mehr Sprachen Einzug gefunden hat? Da habe ich so auf Anhieb nichts zu gefunden....
Loom wird die meisten Probleme lösen, für die man aktuell async nutzen würde - nur eben ohne async, sondern mit „ganz normalem“ Code.
 

KonradN

Super-Moderator
Mitarbeiter
Electronic Arts hat dafür eine API rausgebracht:
Java:
<!-- https://mvnrepository.com/artifact/com.ea.async/ea-async -->
<dependency>
    <groupId>com.ea.async</groupId>
    <artifactId>ea-async</artifactId>
    <version>1.2.3</version>
</dependency>
Ja, aber das ist wohl tot würde ich behaupten... Letzter Change laut https://github.com/electronicarts/ea-async vor 3 Jahren und unterstützt laut Doku Java 8 - 10.

Daraus schließe ich etwas, dass dies nicht wirklich Anklang gefunden hat und Java Entwickler da eher andere Wege gehen wollen bzw. es einfach ein paar Jahrhunderte länger dauert, bis da irgendwas auch in Java ankommt an Neuerungen ...
 

httpdigest

Top Contributor
Das habe ich bereits versucht, das timeout kommt dann aber immer.. also bei mir läuft halt nicht viel traffic, d.h. Wenn ich mit dem timeout arbeite, wird dieses immer wieder kommen, solange keine kommunikation läuft, ich möchte das aber nur beim ersten mal. Und habe nicht gefunden, wie ich das timeout wieder „löschen“ kann…
Die clients haben einen eigenen Thread..
Bitte einfach immer die Doku lesen: https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setSoTimeout(int)
Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.
Du kannst zwischen zwei read() Aufrufen jederzeit das Timeout ändern, bzw. auf unendlich setzen, indem du (wie in der Doku angegeben) eine 0 als Argument verwendest.

Trotzdem solltest du dich aber nicht nur auf das Fliegen der Timeout Exception verlassen, sondern ein eigenes Flag mitführen, welches sagt, ob jemand schon die nötigen Authentifizierungsinformationen mitgeschickt hat. Und dann eben das Ganze z.B. in einer while-Schleife mit innerem try-catch auf die Timeout Exception laufen lassen und die while-Schleife nutzt als Bedingung eben das eigene Flag.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
F Socket Kommunikation Java Basics - Anfänger-Themen 4
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
G Socket Verbindung aufbauen Java Basics - Anfänger-Themen 11
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Asynchrone Socket-Abfragen Java Basics - Anfänger-Themen 5
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
J Socket schließen - Ist eine SocketException unumgänglich? Java Basics - Anfänger-Themen 4
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
N Socket-Programmierung Java Basics - Anfänger-Themen 4
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
B Socket OutputStream Java Basics - Anfänger-Themen 17
B Socket, args Java Basics - Anfänger-Themen 22
L Socket in JTextArea Java Basics - Anfänger-Themen 9
T Input/Output Zwei InputStreams von einem Socket Java Basics - Anfänger-Themen 2
B Socket Problem Java Basics - Anfänger-Themen 3
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
M Versand von Nachrichten via Socket (Delay) Java Basics - Anfänger-Themen 21
F socket-problem Java Basics - Anfänger-Themen 6
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
E Socket (Client) dauerhaft aktiv? Java Basics - Anfänger-Themen 9
D Java - Socket - Datenübertragung Java Basics - Anfänger-Themen 18
E Input/Output einfachen Socket für XML-Anfragen bauen Java Basics - Anfänger-Themen 13
R Cannot find a free socket for the debugger Java Basics - Anfänger-Themen 6
M "Connection reset" gbxRemote Socket Java Basics - Anfänger-Themen 9
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
L FTP per Socket Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
M Socket Server Java Basics - Anfänger-Themen 9
N Socket Problem? Java Basics - Anfänger-Themen 9
G Socket erstellen dauert sehr lange. Java Basics - Anfänger-Themen 4
H Java Socket Java Basics - Anfänger-Themen 14
A XML Daten über Socket Java Basics - Anfänger-Themen 3
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
C Socket Programmierung Java Java Basics - Anfänger-Themen 4
F Socket Instanz auf Klasse welche von Socket erbt zuweisen Java Basics - Anfänger-Themen 3
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
J Daten von einem (char*)Socket einlesen. Java Basics - Anfänger-Themen 3
S Java Socket Java Basics - Anfänger-Themen 3
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
M Ändern einer Socket-Eigenscheft aus einem modalen Dialog? Java Basics - Anfänger-Themen 6
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
J RxTx/RS232 Kommunikation (TwoWay) Java Basics - Anfänger-Themen 10
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
H Kommunikation C++ <> Java Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
F Kommunikation von 2 Klasse Java Basics - Anfänger-Themen 5
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
B jtapi <-> tapi Kommunikation Java Basics - Anfänger-Themen 2
D Kommunikation zwischen zwei Java Anwendungen möglich? Java Basics - Anfänger-Themen 6
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
D J/Direct oder JNI? .bzw. Kommunikation mit Windows-API. Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Kommunikation zwischen Klassen, aber bitte MVC Java Basics - Anfänger-Themen 12
G Kommunikation zwischen Applet und Java-Anwendung über TCP/IP Java Basics - Anfänger-Themen 3
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
Q Kommunikation zwischen Frames Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben