Hi,
ich soll einen kleinen Client/Server schreiben, wobei zwischen Client und Server einfach nur eine Verbindung aufgebaut werden soll. Der Server soll dann den Port des Clients in eine Datei schreiben (es soll der DataOutputStream verwendet werden).
Ich habe hierbei jetzt 2 Probleme bzw. Fragen.
Zum einen wird der Server (wahrscheinlich) nicht richtig beendet. Beim ersten Versuch funktioniert es, doch wenn ich den Server dann ein 2. mal starte bekomme ich folgende Exception:
Was ja im Prinzip nur heißt das bereits eine offene Verbindung auf dem Port existiert und der Server eben nicht richtig beendet wurde oder!?
Ich habe schonmal ein bisschen im Internet gesucht und herausgefunden das man das umgehen kann indem man für den Server einen extra Thread aufmacht und diesen nach einer bestimmten Zeit einfach schließt.
Gibt es dafür evtl noch eine andere Lösung? Oder liegt der Fehler vllt doch im Quellcode?
Das zweite Problem das ich habe ist das speichern des Ports. Der Inhalt der Datei sieht meistens in etwa so aus: " ¡". Ich hab auch mal eine Kontrollausgabe des Ports gemacht wobei da meistens ein Port 1000+ rauskommt (z.B. 1185) statt 8080.
Kann mir evtl jemand erklären woran das zum einen liegt das bei der Ausgabe auf der Konsole ein anderer Port rauskommt und warum in der Datei nur irgendwelche Zeichen landen!?
Hier mal noch der Quellcode des Servers:
Und der Client:
ich soll einen kleinen Client/Server schreiben, wobei zwischen Client und Server einfach nur eine Verbindung aufgebaut werden soll. Der Server soll dann den Port des Clients in eine Datei schreiben (es soll der DataOutputStream verwendet werden).
Ich habe hierbei jetzt 2 Probleme bzw. Fragen.
Zum einen wird der Server (wahrscheinlich) nicht richtig beendet. Beim ersten Versuch funktioniert es, doch wenn ich den Server dann ein 2. mal starte bekomme ich folgende Exception:
Code:
java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at vorklausur.aufg3.Server.main(Server.java:11)
Was ja im Prinzip nur heißt das bereits eine offene Verbindung auf dem Port existiert und der Server eben nicht richtig beendet wurde oder!?
Ich habe schonmal ein bisschen im Internet gesucht und herausgefunden das man das umgehen kann indem man für den Server einen extra Thread aufmacht und diesen nach einer bestimmten Zeit einfach schließt.
Gibt es dafür evtl noch eine andere Lösung? Oder liegt der Fehler vllt doch im Quellcode?
Das zweite Problem das ich habe ist das speichern des Ports. Der Inhalt der Datei sieht meistens in etwa so aus: " ¡". Ich hab auch mal eine Kontrollausgabe des Ports gemacht wobei da meistens ein Port 1000+ rauskommt (z.B. 1185) statt 8080.
Kann mir evtl jemand erklären woran das zum einen liegt das bei der Ausgabe auf der Konsole ein anderer Port rauskommt und warum in der Datei nur irgendwelche Zeichen landen!?
Hier mal noch der Quellcode des Servers:
Java:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
Socket client = null;
try {
ServerSocket server = new ServerSocket(8080);
while(true) {
client = server.accept();
int port = client.getPort();
DataOutputStream dos = new DataOutputStream(
new FileOutputStream("Ports.txt"));
dos.writeInt(port);
dos.close();
}
} catch(IOException e) {
e.printStackTrace();
} finally {
try { if(client!=null) client.close(); } catch(IOException e) {}
}
}
}
Und der Client:
Java:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
Socket so = null;
try {
so = new Socket("127.0.0.1",8080);
int port = so.getPort();
} catch(IOException e) {
e.printStackTrace();
} finally {
try { if(so!=null) so.close(); } catch(IOException e) {}
}
}
}