Hi Forum,
ich hab hier ein generelles Verständnisproblem zum Thema Verbindungen, Sockets und die Trennung dieser Verbindungen bzw. Sockets:
Ich habe einen Client:
und einen Server:
Was ich versuche ist die beiden Verbindungen zu trennen und den Server quasi für eine neue Verbindung frei zu machen.
Ich dachte wenn ich alle Sockets schließe (.close() ) endet damit auch die Verbindung.
Leider liefert mir socket.isConnected() immer true zurück, obwohl socket.isclosed() mir auch true zurück liefert. Das gleiche hab ich im Client d.h. wenn ich mich kurz darauf neu verbinden möchte bekomme ich eine socketException: Already connected, onwohl ich auch alle Sockets geschlossen habe. ???:L
Hab ich an der ganzen Socket-Geschichte was falsch verstanden?
Danke im voraus!
ich hab hier ein generelles Verständnisproblem zum Thema Verbindungen, Sockets und die Trennung dieser Verbindungen bzw. Sockets:
Ich habe einen Client:
Java:
public void startConnect() throws IllegalArgumentException, IOException{
Socket socket = new Socket();
SocketAddress remoteBindPoint = new InetSocketAddress(serveraddress, port);
try{
socket.connect(remoteBindPoint, 5000);
}
catch (IOException e){
}
sendData(socket.getOutputStream());
socket.close();
}
public void sendData(OutputStream out){
DataOutputStream dos = new DataOutputStream(out);
for (int i = 0; i < instructions.size(); i++) {
try {
dos.writeUTF(instructions.get(i));
} catch (IOException e) {
}
}
try {
dos.flush();
dos.close();
} catch (IOException e) {
}
}
und einen Server:
Java:
public void receiveData(InetAddress ia, int port, InputStream is) {
DataInputStream dis = new DataInputStream(is);
ArrayList<String> receiveList = new ArrayList<String>();
while(true){
try {
String holder = dis.readUTF();
receiveList.add(holder);
} catch (EOFException e) {
break;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
receiverQueue.offer(new Worker(ia, port, receiveList));
try {
dis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
while(true){
ServerSocket sskt = new ServerSocket(port);
Socket socket = sskt.accept();
System.out.println("Connected");
receiveData(socket.getInetAddress(), socket.getPort(),socket.getInputStream());
System.out.println("rdy");
sskt.close();
System.out.println("ServerSocket closed? " + sskt.isClosed());
socket.close();
System.out.println("socket connected?: " + socket.isConnected());
}
} catch (IOException e) {
e.printStackTrace();
}
}
Was ich versuche ist die beiden Verbindungen zu trennen und den Server quasi für eine neue Verbindung frei zu machen.
Ich dachte wenn ich alle Sockets schließe (.close() ) endet damit auch die Verbindung.
Leider liefert mir socket.isConnected() immer true zurück, obwohl socket.isclosed() mir auch true zurück liefert. Das gleiche hab ich im Client d.h. wenn ich mich kurz darauf neu verbinden möchte bekomme ich eine socketException: Already connected, onwohl ich auch alle Sockets geschlossen habe. ???:L
Hab ich an der ganzen Socket-Geschichte was falsch verstanden?
Danke im voraus!
Zuletzt bearbeitet: