# Client Socket mit Eventlistener?



## daflodedeing (26. Sep 2011)

Hallo zusammen,

ich programmiere momentan eine kleine GUI und muss über Sockets (ich bin der Client) eine Verbindung zu einer SPS aufbauen. Das klappt auch problemlos.

Allerdings muss ich zwei Socket-Verbindungen aufbauen; was prinzipiell auch kein Problem ist.

Auf beiden Sockets schickt mir die SPS etwas ?

wenn ich dann z.B. sage 


```
Socket socket_zyk_PhC = new Socket("192.168.1.11", 9005);
					
						InputStream in = socket_zyk_PhC.getInputStream();
							
										 
							
								in.read(test_receive_PhC_byte);
```


bleibt ja das Programm solange bei in.read stehen bis was kommt, das will ich aber nicht .

Darum wollt ich fragen ob es möglich ist für Sockets einer Art Listener wie bei Buttons zu bauen?

Viele Grüße


----------



## HoaX (26. Sep 2011)

Ja ist es, ein Beispiel dazu wie man mit dem blockierenden Read umgeht findest du in jedem Chatclient-Beispiel (einfach das ganze in ein Thread auslagern).


----------



## daflodedeing (26. Sep 2011)

danke...

hab leider grad auf die Schnelle keinen einfachen Chat gefunden;

ich denke du meinst für jeden Socket einen eigenen Thread oder?


Gruß


----------



## Andi_CH (26. Sep 2011)

daflodedeing hat gesagt.:


> hab leider grad auf die Schnelle keinen einfachen Chat gefunden;


Oh welch Wunder - etwa 2.5 Sekunden Aufwand



daflodedeing hat gesagt.:


> ich denke du meinst für jeden Socket einen eigenen Thread oder?


Logisch - sonst ergibt es ja keinen Sinn - das Hauptprogramm sollte auch in einem eigenen Thread laufen - also Hauptprogramm + für jeden Socket einen Thread



daflodedeing hat gesagt.:


> Gruß


Auch GruB
Andi


----------



## daflodedeing (3. Okt 2011)

Ok, ich habe ein wenig nachgeforscht und es gibt ja auch die Möglichkeit von non blocking Sockets:

Siehe Beispiel hier:

Using a Selector to Manage Non-Blocking Sockets | Example Depot

Hat schon mal jemand sowas gesehen?

Ich verstehe leider nicht, wie kann ich denn hier sagen SocketChannel1 schreibt mir bitte dieses und jenes byte-array?

grüße


----------



## Nightmares (5. Okt 2011)

Was du da siehst ist JAVA NIO. Bei NIO wird mit nicht Blockenden Sockets gearbeitet. Im Prinzip macht man dort nichts anderes als mit jedem Selector Durchlauf alle Sockets die ein Event haben (lesen,schreiben,etc) bzw ein Event ausführen können abrufen und prüfen ob Daten zum schreiben vorhanden sind. NIO ist allerdings schwieriger zu programmieren als normale Sockets (das ganze Blockt ja nicht etc. dh. du musst viel mit Buffern arbeiten). Ich würde dir für den Anfang den Ansatz mit ein bzw. zwei Thread(s) pro Verbindung empfehlen.


----------

