Hallo, ich bastele momentan an einem Server der auch passive Übertragung (ähnlich ftp) unterstützt.
Dabei bin ich auf folgendes Problem gestoßen:
Ich habe zwei ServerSockets die jeweils in einem eigenen Thread laufen.
Nun scheinen die accept()-Methoden der beiden sich gegenseitig zu blockieren.
Wenn ich mich 3 mal hintereinander zu dem ersten ServerSocket connecte, wird die Verbindung beim ersten mal angenommen, bzw. die Testdaten werden geschickt, die nächsten beiden male nicht.
Damit das ganze funktioniert muss ich mich immer abwechselnd zu beiden Sockets verbinden.
Unter Ubuntu funktioniert das ganze wunderbar.
Mein System: Win Xp Pro SP2
Ausserdem habe ich Antivir und die Ashampoo Firewall laufen, falls das vielleicht Probleme macht.
Weiß vielleicht jemand wie ich das ganze auf Windows zum laufen bringe?
Hier mal Testcode:
Dabei bin ich auf folgendes Problem gestoßen:
Ich habe zwei ServerSockets die jeweils in einem eigenen Thread laufen.
Nun scheinen die accept()-Methoden der beiden sich gegenseitig zu blockieren.
Wenn ich mich 3 mal hintereinander zu dem ersten ServerSocket connecte, wird die Verbindung beim ersten mal angenommen, bzw. die Testdaten werden geschickt, die nächsten beiden male nicht.
Damit das ganze funktioniert muss ich mich immer abwechselnd zu beiden Sockets verbinden.
Unter Ubuntu funktioniert das ganze wunderbar.
Mein System: Win Xp Pro SP2
Ausserdem habe ich Antivir und die Ashampoo Firewall laufen, falls das vielleicht Probleme macht.
Weiß vielleicht jemand wie ich das ganze auf Windows zum laufen bringe?
Hier mal Testcode:
Java:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerThread extends Thread {
private ServerSocket serverSocket;
public ServerThread(int port) {
try {
serverSocket = new ServerSocket(port);
start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
super.run();
Socket tmpCientSocket;
int connectionCount = 0;
try {
while (!interrupted()){
System.out.println("Before Sock with port:"+serverSocket.getLocalPort()+" accept #"+connectionCount);
tmpCientSocket = serverSocket.accept();
tmpCientSocket.getOutputStream().write("hello".getBytes());
System.out.println("After Sock with port:"+serverSocket.getLocalPort()+" accept #"+connectionCount);
connectionCount++;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
//TODO close clientSocks
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new ServerThread(9966);
new ServerThread(9977);
}
}