![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() So, nun mal eine Frage zu Sockets...
![]() Ich habe eine Endlosschleife mit der ich auf einkommende Verbindungen warte: Code:
while(true) { socket = new ServerSocket(port); new MSSClientThread(instances++, socket).start(); } Doch wie stelle ich in dem Thread fest, ob der Client seine Connection geschlossen hat, oder nicht??? ![]() Code:
public void run() { System.out.println("Verbindung aufgebaut: " + instance); while(true) { try { //irgendwas machen... if(KEINE VERBINUNG MEHR) { socket.close(); break; //Thread beenden } } catch(Exception ex) {} } } |
![]() |
![]() |
![]() |
#2 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() Und noch eine Frage hätte ich:
Wie übertrage ich ein ganzes OBJEKT über eine Socketverbindung? Auf der Clientseite müsste ein Objekt erstellt, zum Server geschickt und von diesem 1:1 repliziert werden können, so dass dieser dann Eigenschaften aus diesem Objekt auslesen, bzw auf Methoden zugreifen kann... Kann mir da wer helfen? ![]() |
![]() |
![]() |
![]() |
#3 |
Quantensingularität
![]() |
![]() Ad 1) schon mal mit der Methode isConnected() der Klasse Socket versucht?
Mit den beiden Methoden getOutputStream() und getInputStream() bekommst du einen Input- bzw Output Stream. Direkte Subklassen von denen ist ObjectInputStream bzw. ObjektOutputStream mittels denen du Objekte serialisieren kannst solange sie das Interface Serializable implementieren. Und damit kannst du Objekte über Sockets verschicken. Siehe dazu auch: http://java.sun.com/docs/books/tutor...ngWriting.html bzw. das ganze Tutorial über Sockets: http://java.sun.com/docs/books/tutor...ets/index.html
____________________________________
Was ist klein, grün und dreieckig? Ein kleines grünes Dreieck! Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg! |
![]() |
![]() |
![]() |
#4 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() Da bin ich auch kurz nach dem Posten draufgekommen
![]() ![]() Sagen wir ich verschick ein Objekt vom Typ JPanel... Alles kein Problem, NUR... wie mach ich auf der Empfängerseite wieder ein JPanel draus? Ich habe es mit Code:
JPanel o = (JPanel) oinput.readObject(); ^^^^^^ ObjectInputStream Wenn man aber Code:
System.out.println(oinput.readObject()); |
![]() |
![]() |
![]() |
#5 |
Quantensingularität
![]() |
![]() Habe mir das mal kurz ind der Java API angeshen. An und für sich müsste es genauso funktionieren. JPanel ist Serializable, und mittels readObject bekommst auch das Objekt.
Was funktioniert denn nicht? Versuche erst einmal einfacher Objekte (Value Objekte wie zB. eine HashMap mit Werten) zu verschiocken. Da kannst du die Werte direkt überprüfen.
____________________________________
Was ist klein, grün und dreieckig? Ein kleines grünes Dreieck! Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg! |
![]() |
![]() |
![]() |
#6 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() Ich glaub's nicht... Aufeinmal funktioniert das und ich hab (glaub ich *g*) nichts verändert...
![]() Vorher hat er sich zur Laufzeit furchtbar echauffiert, er könne dieses Objekt nicht casten... Tjo... ![]() Vielen Dank jedenfalls. Und keine Angst, ich komme wieder! ![]() ![]() |
![]() |
![]() |
![]() |
#7 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() Langsam wird mir die Fragerei peinlich...
![]() Erstmal Code (Kot?): Code:
import java.net.*; import java.io.*; import javax.swing.*; public class MSSClientThread extends Thread { protected int instance; protected Socket socket; public MSSClientThread(int inst, Socket sock) { instance = inst; socket = sock; } public void run() { InputStream input = null; ObjectInputStream oinput = null; System.out.println("(" + instance + ") Verbindung aufgebaut"); try { input = socket.getInputStream(); //oinput = new ObjectInputStream(input); } catch (Exception ex) { ex.printStackTrace(); } while (true) { try { oinput = new ObjectInputStream(input); JPanel o = (JPanel) oinput.readObject(); System.out.println("(" + instance + ") " + o.getLocation().x); if (input.read() == -1) { System.out.println("(" + instance + ") Verbindung beendet"); socket.close(); break; } } catch (Exception ex) { ex.printStackTrace(); break; } } } } Code:
java.io.StreamCorruptedException: invalid stream header at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:737) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253) at sic.MSSClientThread.run(MSSClientThread.java:39) |
![]() |
![]() |
![]() |
#9 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() Hi!
Der Client-Code sieht ungefähr so aus: Verbindung herstellen Code:
void jButton1_actionPerformed(ActionEvent e) { try { socket = new Socket("localhost", 5190); } catch (IOException ex) { ex.printStackTrace(); } } Code:
void btnSend_actionPerformed(ActionEvent e) { JPanel objekt = new JPanel(); objekt.setLocation(10,10); try { out = socket.getOutputStream(); oout = new ObjectOutputStream(out); //ObjectOutputStream oout = socket.getOutputStream(); oout.writeObject(objekt); //oout.writeObject(null); } catch (Exception ex) { ex.printStackTrace(); } } |
![]() |
![]() |
![]() |
#10 |
Hero
![]() Registriert seit: 08.04.2003
Beiträge: 821
|
![]() Die Methode run() vom Server-Thread:
Code:
public void run() { InputStream input = null; ObjectInputStream oinput = null; System.out.println("(" + instance + ") Verbindung aufgebaut"); try { input = socket.getInputStream(); oinput = new ObjectInputStream(input); } catch (Exception ex) { ex.printStackTrace(); } JPanel o; Object ob = null; try { while (true) { if ((ob = oinput.readObject()) == null) { System.out.println("NULL"); break; } else { System.out.println(ob.toString()); oinput = new ObjectInputStream(input); } } System.out.println("(" + instance + ") Verbindung beendet"); oinput.close(); input.close(); socket.close(); } catch (Exception ex1) { ex1.printStackTrace(); //System.out.println(ob.toString()); } } |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|