SocketException: Connection Reset

Hallo,

Ich dachte ich eröffne für diese Frage einen neuen Thread, damit er für spätere „Problem-Haber“ auch noch zu finden ist :wink:

Ich hatte ein Problem mit dem Erreichen meines Java-Servers über meine Internet-IP, naja stellt sich heraus es war meine kaputte Firewall die einfach alles weggeblockt hatte =(
Ich bin jetzt also temporär auf meinen funktionsfähigeren Laptop umgestiegen und hab es dort ausprobiert!

Nun, ein kleiner Erfolg ist zu vermelden:
Beim Server kommt etwas an, allerdings wird sofort darauf eine Exception geworfen :frowning:

Ich habe mal zwei KSKB’s gemacht und zeige euch anschließend den Output(einmal bei localhost und einmal bei meiner Public domain):

KSKB_CLIENT:


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class Client_KSKB {
    private Socket serverConnection = null;
    private ObjectOutputStream streamOut = null;
    private ObjectInputStream streamIn = null;
    private MainClientThread mClT;
        private boolean run_Thread_run = false;

    String serverAdress = "localhost\Public IP";
    int serverPort = 3443;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Client_KSKB().initConnection();
    }

    public void stopConnection() {
        run_Thread_run = false;
        try {
            if (serverConnection != null && !serverConnection.isClosed()) {
                serverConnection.close();
                System.out.println("CLOSED");
            }
        } catch (IOException ex) {
            System.out.println("stopConnection bug");
        }
        serverConnection = null;
    }

    public void initConnection() {
        stopConnection();
        try {
            System.out.println("Tries to init new Connection(ip: "+serverAdress+" port:"+serverPort+")");
//            SocketAddress addr = new InetSocketAddress( serverAdress/*+":"+serverPort*/,serverPort );
            serverConnection = new Socket(serverAdress/*+":"+serverPort*/,serverPort);
//            serverConnection.connect( addr, 10000 );
            System.out.println("1");
            streamOut = new ObjectOutputStream(serverConnection.getOutputStream());
            System.out.println("2");
            streamIn = new ObjectInputStream(serverConnection.getInputStream());
            
            streamOut.writeInt(1234);
            streamOut.flush();
            System.out.println("3");
            run_Thread_run = true;
            mClT = new MainClientThread();
            System.out.println("4");
            mClT.start();
            System.out.println("CONNECTED");
        } catch (SocketTimeoutException ex) {
            ex.printStackTrace();
            System.out.println("Server not responding");
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("initConnection bug");
        }
    }

    public void sendToServer(Object o) {
        try {
            streamOut.writeObject(o);
            streamOut.flush();
        } catch(Exception ex) {
            System.out.println("send bug");
        }
    }
    public boolean isConnected() {
        return run_Thread_run && serverConnection.isConnected();
    }

    private class MainClientThread extends Thread {
        @Override
        public void run() {
            while (run_Thread_run) {
                try {
                    if (! serverConnection.isClosed()) {
                        Object o = streamIn.readObject();
                        System.out.println(o);
                    }
                } catch(Exception ex) {
                    if (serverConnection != null && !serverConnection.isClosed())
                        System.out.println("read bug");
                    stopConnection();
                }
            }
        }
    }
}

KSKB_SERVER:


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server_KSKB {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        new Server_KSKB().startServer();
    }

    private ServerSocket serverSocket = null;
    MainServerThread checkForNewClients;
        boolean run_Thread_run = false;
    private ArrayList<ClientThread> clients = new ArrayList<>();

    int serverPort = 3443;

    public void startServer() {
        try {
//            InetAddress thisIp = InetAddress.getByName("0.0.0.0");
            serverSocket = new ServerSocket(serverPort);
            System.out.println("New Server Socket(port: "+serverPort+") initiated");
        } catch (IOException ex) {
            System.out.println("can't init new ServerSocket(with port: "+serverPort+"): " + ex.getMessage());
        }
        try {
            Thread.sleep(100);
        } catch (InterruptedException ex) {}
        run_Thread_run = true;
        checkForNewClients = new MainServerThread();
        checkForNewClients.start();
    }


    private class MainServerThread extends Thread {
        @Override
        public void run() {
            Socket newClientConnection = null;
            while (run_Thread_run) {
                try {
                    System.out.println("Server Waiting for new Client's...");
                    if (serverSocket != null && ! serverSocket.isClosed())
                        newClientConnection = serverSocket.accept();
                    System.out.println("New Client tries to connect: " + newClientConnection);
                    ObjectInputStream newClient_InputStream = new ObjectInputStream(newClientConnection.getInputStream());
                    ObjectOutputStream newClient_OutputStream = new ObjectOutputStream(newClientConnection.getOutputStream());
                    System.out.println(newClient_InputStream.readInt());

                    logInClient(newClientConnection, newClient_InputStream, newClient_OutputStream);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        private void logInClient(Socket newClient_Socket, ObjectInputStream newClient_InputStream, ObjectOutputStream newClient_OutputStream) throws IOException {
            ClientThread ct = new ClientThread(newClient_Socket, newClient_InputStream, newClient_OutputStream);
            ct.start();
            System.out.println("Client logged in");
            clients.add(ct);
        }
     }


     private class ClientThread extends Thread {
         private Socket clientConnection;
         private ObjectInputStream inputStream;
         private ObjectOutputStream outputStream;
            private boolean run_Thread_run = true;

         public ClientThread(Socket clientConn, ObjectInputStream inputStream, ObjectOutputStream outputStream) throws IOException {
             clientConnection = clientConn;
             this.inputStream = inputStream;
             this.outputStream = outputStream;
//             userName = inputStream.readUTF();
         }

         public void sendToClient(Object o) throws IOException {
             if (! clientConnection.isClosed() && !clientConnection.isOutputShutdown()) {
                 outputStream.writeObject(o);
                 outputStream.flush();
             }
         }

         @Override
         public void run() {
             while(run_Thread_run) {
                 try {
                     if (! clientConnection.isClosed()) {
                         Object o = inputStream.readObject();
                         System.out.println("recieved: "+o);
                     } else {
                        run_Thread_run = false;
                     }
                 } catch (IOException ex) {
                    run_Thread_run = false;
                 } catch (ClassNotFoundException ex) {
                     ex.printStackTrace();
                    run_Thread_run = false;
                 }
             }
         }

         public void close() {
             try {
                 clientConnection.close();
                 inputStream.close();
                 outputStream.close();
             } catch (IOException ex) {
                 ex.printStackTrace();
             }
         }
     }
}```

**OUTPUT::**

localhost:

Client:
Tries to init new Connection(ip: localhost port:3443)
1
2
3
4
CONNECTED

Server:
New Server Socket(port: 3443) initiated
Server Waiting for new Client’s…
New Client tries to connect: Socket[addr=/127.0.0.1,port=1182,localport=3443]
1234
Client logged in
Server Waiting for new Client’s…



public ip:

Client:
Tries to init new Connection(ip: publicIP port:3443)

Server:
New Server Socket(port: 3443) initiated
Server Waiting for new Client’s…
New Client tries to connect: Socket[addr=/192.168.1.111,port=1183,localport=3443]
java.net.SocketException: Connection reset
Server Waiting for new Client’s…
at java.net.SocketInputStream.read(SocketInputStream.java:196)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.(ObjectInputStream.java:299)
at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)
New Client tries to connect: Socket[addr=/192.168.1.111,port=1183,localport=3443]
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
Server Waiting for new Client’s…
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.(ObjectInputStream.java:299)
at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)

Hast du noch eine Firewall an?

Ja, die Firewall(auf meinem Laptop ist noch XP, falls das wichtig ist) ist noch an!
Aber auch wenn ich sie abschalte bleibt mein Problem leider!

versuche es mal nur im lokalen LAN von einem zweiten Rechner

Hab es gerade getestet! Exact selbes Problem ;(
Aber danke für den Versuch!!!
Noch eine Idee?

Zu den eventuellen Desktopfirewalls:

  • Am Server kommen die Pakete durch. Die java.exe darf also auf dem entsprechenden Port auf eingehende Verbindungen lauschen. Von daher funkt die Desktopfirewall des Servers nicht dazwischen.
  • Der Client kann seine Verbindungsanfragen loswerden. Die java.exe darf also ausgehend Verbindungen öffnen. Von daher funkt auch hier keine Desktopfirewall dazwischen.
    Zum Code:
    Habe ihn mir recht lange angeschaut, kann keine Fehler finden. (Das ich keine finde, heißt aber nicht, dass keine da sind :wink: ). Aber, dass es über localhost funktioniert, spricht ja auch sehr dafür, dass der CODE funktioniert.

Bleibt also Deine Netzwerkstruktur. Da werde ich noch nicht ganz schlau draus, wo da was steht. Deswegen zunächst nur zwei Möglichkeiten:

  1. Die meisten Heimrouter kommen nicht damit klar, wenn man ihre öffentliche IP aus ihrem privaten Netz anspricht.
  2. Du hast Dir möglicherweise die Routen verhagelt, sodass die Pakete auf dem Hinweg einen anderen Weg nehmen, als auf dem Rückweg. Wenn auf einem der Wege eine Statefull Firewall dazwischen hängt, blockiert diese, weil sie nur die Hälfte der Pakete sieht und es deswegen für einen ungültigen Verbindungsversuch hält.

Du hast zwar geschrieben, dass Du mogel’s Tipp bereits ausprobiert hast (beide Rechner im selben Subnetz, keine public IP), aber recht glauben mag ich es nicht. Poste doch von dem Versuch nochmal den Output. Wichtig dabei, die verwendeten IPs anzugeben.


New Server Socket(port: 3443) initiated
Server Waiting for new Client's...
New Client tries to connect: Socket[addr=/192.168.1.135,port=49799,localport=3443]
Server Waiting for new Client's...
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:196)
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:196)
New Client tries to connect: Socket[addr=/192.168.1.135,port=49799,localport=3443]
Server Waiting for new Client's...
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:196)
New Client tries to connect: Socket[addr=/192.168.1.135,port=49799,localport=3443]
Server Waiting for new Client's...
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)

Das ist der Output wenn ich den Server über den anderen PC erreichen möchte!!

Dein Tipp mit der Stateful-firewall habe ich auch schon gelesen gehabt, aber ich wusste nicht, unter xp, wie diese spezielle firewall auszuschalten ist und wo sie zu finden ist!! @nillehammer : Weißt du wo und wie ich das mache??

Lass uns die Desktopfirewalls erstmal ausklammern. Also aus dem neuen Output sehe ich, dass der Client die IP 192.168.1.135 hat. Daraus kann man schon gewisse Dinge mutmaßen. Aber lieber auf Nummer sicher. Wichtig bei der Netzstruktur sind folgende Daten:
IP, Subnetzmaske und ggf. Routen (bspw. default Route über Standardgateway). Unter Windows bekommst Du IP, Subnetzmaskte, Standardgateway über “ipconfig” raus. Detailliertere Infos zu den Routen mittels “route print”. Mach das bitte für Server und Client und poste die Daten.

Ich glaub eher das problem ist, dass das erste was du in “initConnection” machst ist die Verbindung wieder zu beenden. KSKB Client Zeile 40.

das passiert ja noch vor der Verbindung,
und wenn es nicht per Thread zeit-zufallsabhängige ‘Race Condition’ wäre, müsste es auch bei localhost fehlschlagen

allgemein immer auch bewährten Standardcode aus dem Internet verwenden, Dummy-Chats usw.,
wenn die funktionieren, kann man anfangen

es ist kein Java-Problem sondern Netzwerkeinstellungen

ipconfig:

Windows-IP-Konfiguration


Ethernetadapter Drahtlose Netzwerkverbindung:

        Verbindungsspezifisches DNS-Suffix:
        IP-Adresse. . . . . . . . . . . . : 192.168.1.111
        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
        Standardgateway . . . . . . . . . : 192.168.1.1

route print:


Schnittstellenliste
0x1 ........................... MS TCP Loopback interface
0x2 ...00 18 de 8d 95 bf ...... Intel(R) PRO/Wireless 3945ABG Network Connection
 - Paketplaner-Miniport
===========================================================================
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway   Schnittstelle  Anzahl
          0.0.0.0          0.0.0.0      192.168.1.1   192.168.1.111       25
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0    192.168.1.111   192.168.1.111       25
    192.168.1.111  255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255  255.255.255.255    192.168.1.111   192.168.1.111       25
        224.0.0.0        240.0.0.0    192.168.1.111   192.168.1.111       25
  255.255.255.255  255.255.255.255    192.168.1.111   192.168.1.111       1
Standardgateway:       192.168.1.1
===========================================================================
Ständige Routen:
  Keine

Was kann man den daraus mutmaßen? Das ist die interne Ip meines zweiten Computers…

Gut, der Server hat die IP 192.168.1.111 und Subnetzmaske 255.255.255.0. Der Client hat die IP 192.168.1.135. Wenn er auch die Subnetzmaske 255.255.255.0 hat (das war meine Mutmaßung, überprüfe das noch zur Sicherheit), befinden sie sich im selben Subnetz. Sie SOLLTEN dann direkt miteinander ohne Gateway dazwischen kommunizieren. D.h. es funkt kein Gateway mit eventueller Firewall-Funktion dazwischen.

Nun sehe ich aber gerade, dass die Netzwerkschnittstelle des Servers ein WLAN-Adapter ist. Ist der Client auch per WLAN im Netz oder per Kabel?

Beide per WLAN!

Und Subnetzmaske, Routen auf dem Client auch gleich, wie beim Server?

Edit: Und beide hängen im selben WLAN (SSID gleich)?

Nur ne Sekunde ich geb dir beiden CMD Outputs(diesmal win 7):

ipconfig-der wichtige part

   IPv4-Adresse  . . . . . . . . . . : 192.168.1.135
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : 192.168.1.1

route print

Schnittstellenliste
 16...e6 46 9a 0a 0a b1 ......Microsoft Virtual WiFi Miniport Adapter
 14...e0 46 9a 0a 0a b1 ......NETGEAR WNA1100 N150 Wireless USB Adapter
 11...e0 69 95 9f 12 6e ......Realtek PCIe GBE Family Controller
 20...08 00 27 00 d4 73 ......VirtualBox Host-Only Ethernet Adapter
  1...........................Software Loopback Interface 1
 22...00 00 00 00 00 00 00 e0 Microsoft-ISATAP-Adapter
 23...00 00 00 00 00 00 00 e0 Microsoft-ISATAP-Adapter #2
 24...00 00 00 00 00 00 00 e0 Microsoft-ISATAP-Adapter #3
 13...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 21...00 00 00 00 00 00 00 e0 Microsoft-ISATAP-Adapter #4
===========================================================================

IPv4-Routentabelle
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway    Schnittstelle Metrik
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.135     25
        127.0.0.0        255.0.0.0   Auf Verbindung         127.0.0.1    306
        127.0.0.1  255.255.255.255   Auf Verbindung         127.0.0.1    306
  127.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    306
      192.168.1.0    255.255.255.0   Auf Verbindung     192.168.1.135    281
    192.168.1.135  255.255.255.255   Auf Verbindung     192.168.1.135    281
    192.168.1.255  255.255.255.255   Auf Verbindung     192.168.1.135    281
     192.168.56.0    255.255.255.0   Auf Verbindung      192.168.56.1    276
     192.168.56.1  255.255.255.255   Auf Verbindung      192.168.56.1    276
   192.168.56.255  255.255.255.255   Auf Verbindung      192.168.56.1    276
        224.0.0.0        240.0.0.0   Auf Verbindung         127.0.0.1    306
        224.0.0.0        240.0.0.0   Auf Verbindung      192.168.56.1    276
        224.0.0.0        240.0.0.0   Auf Verbindung     192.168.1.135    281
  255.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    306
  255.255.255.255  255.255.255.255   Auf Verbindung      192.168.56.1    276
  255.255.255.255  255.255.255.255   Auf Verbindung     192.168.1.135    281
===========================================================================
Ständige Routen:
  Keine

IPv6-Routentabelle
===========================================================================
Aktive Routen:
 If Metrik Netzwerkziel             Gateway
  1    306 ::1/128                  Auf Verbindung
 20    276 fe80::/64                Auf Verbindung
 14    281 fe80::/64                Auf Verbindung
 14    281 fe80::6d85:2c7d:e621:c25f/128
                                    Auf Verbindung
 20    276 fe80::8857:f575:806:906f/128
                                    Auf Verbindung
  1    306 ff00::/8                 Auf Verbindung
 20    276 ff00::/8                 Auf Verbindung
 14    281 ff00::/8                 Auf Verbindung
===========================================================================
Ständige Routen:
 If Metrik Netzwerkziel             Gateway
  0 4294967295 2620:9b::/96             Auf Verbindung
  0   9000 ::/0                     2620:9b::500:1
===========================================================================

Vielen Dank für deine Hilfe

Ok, beide sind im selben Subnetz. Bei den Routen auch nix Exotisches (wahrscheinlich eh alles per DHCP vom WLAN-Router ausgegeben?). Von daher passt das. Viel Aufwand dafür, herauszufinden, dass es daran NICHT liegt. Aber so wenigstens sicher. Glaube auch nicht, dass unterschiedliche WLANs im Spiel sind. Die SSIDs werden auf beiden Rechnern ziemlich sicher gleich sein. Nur zur Sicherheit noch mal kontrollieren bitte.

Mein Router zeigt mir beide meine Computer an und beide sind mit dem gleichnamigen(und selbigen) Router verbunden wenn du das meinst!

**
Ich habe hier(http://www.javaprogrammingforums.com/java-networking/17319-java-net-socketexception-connection-reset.html) gelesen das es an einem Bug in Java liegen kann, aber wie ich den lösen kann weiß ich nicht! Den speziellen Command der dort steht kann ich nicht ausführen… Außerdem übertrage ich ja nicht über FTP ;(**

*** Edit ***

@nillehammer
Wenn mir also offensichtlich mein Windows(bzw. die Windows-XP-Firewall) oder mein Router die Verbindung abschneidet…
Wie überrede ich die das nicht zu tun?

*** Edit ***

So, ich habe mir jetzt mal Wireshark angeschafft, um mir meinen Packet Traffic auf dem Entsprechenden Port anzuschauen(Wireshark print):

No.     Time           Source                Destination           Protocol Length Info
     14 19.868993000   192.168.1.135         192.168.1.111         TCP      54     58042 > ov-nnm-websrv [RST] Seq=1 Win=0 Len=0

Frame 14: 54 bytes on wire (432 bits), 54 bytes captured (432 bits) on interface 0
Ethernet II, Src: Netgear_0a:0a:b1 (e0:46:9a:0a:0a:b1), Dst: IntelCor_8d:95:bf (00:18:de:8d:95:bf)
Internet Protocol Version 4, Src: 192.168.1.135 (192.168.1.135), Dst: 192.168.1.111 (192.168.1.111)
Transmission Control Protocol, Src Port: 58042 (58042), Dst Port: ov-nnm-websrv (3443), Seq: 1, Len: 0

No.     Time           Source                Destination           Protocol Length Info
     15 22.670169000   192.168.1.135         192.168.1.111         TCP      66     [TCP Retransmission] 58042 > ov-nnm-websrv [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1

Frame 15: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0
Ethernet II, Src: Netgear_4b:c4:9f (20:4e:7f:4b:c4:9f), Dst: IntelCor_8d:95:bf (00:18:de:8d:95:bf)
Internet Protocol Version 4, Src: 192.168.1.135 (192.168.1.135), Dst: 192.168.1.111 (192.168.1.111)
Transmission Control Protocol, Src Port: 58042 (58042), Dst Port: ov-nnm-websrv (3443), Seq: 0, Len: 0

No.     Time           Source                Destination           Protocol Length Info
     16 22.670256000   192.168.1.111         192.168.1.135         TCP      66     [TCP Previous segment not captured] ov-nnm-websrv > 58042 [SYN, ACK] Seq=791554 Ack=1 Win=65535 Len=0 MSS=1460 WS=4 SACK_PERM=1

Frame 16: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0
Ethernet II, Src: IntelCor_8d:95:bf (00:18:de:8d:95:bf), Dst: Netgear_0a:0a:b1 (e0:46:9a:0a:0a:b1)
Internet Protocol Version 4, Src: 192.168.1.111 (192.168.1.111), Dst: 192.168.1.135 (192.168.1.135)
Transmission Control Protocol, Src Port: ov-nnm-websrv (3443), Dst Port: 58042 (58042), Seq: 791554, Ack: 1, Len: 0

No.     Time           Source                Destination           Protocol Length Info
     17 22.672082000   192.168.1.135         192.168.1.111         TCP      54     58042 > ov-nnm-websrv [RST] Seq=1 Win=0 Len=0

Frame 17: 54 bytes on wire (432 bits), 54 bytes captured (432 bits) on interface 0
Ethernet II, Src: Netgear_0a:0a:b1 (e0:46:9a:0a:0a:b1), Dst: IntelCor_8d:95:bf (00:18:de:8d:95:bf)
Internet Protocol Version 4, Src: 192.168.1.135 (192.168.1.135), Dst: 192.168.1.111 (192.168.1.111)
Transmission Control Protocol, Src Port: 58042 (58042), Dst Port: ov-nnm-websrv (3443), Seq: 1, Len: 0

No.     Time           Source                Destination           Protocol Length Info
     24 28.672260000   192.168.1.135         192.168.1.111         TCP      62     [TCP Retransmission] 58042 > ov-nnm-websrv [SYN] Seq=0 Win=8192 Len=0 MSS=1460 SACK_PERM=1

Frame 24: 62 bytes on wire (496 bits), 62 bytes captured (496 bits) on interface 0
Ethernet II, Src: Netgear_4b:c4:9f (20:4e:7f:4b:c4:9f), Dst: IntelCor_8d:95:bf (00:18:de:8d:95:bf)
Internet Protocol Version 4, Src: 192.168.1.135 (192.168.1.135), Dst: 192.168.1.111 (192.168.1.111)
Transmission Control Protocol, Src Port: 58042 (58042), Dst Port: ov-nnm-websrv (3443), Seq: 0, Len: 0

No.     Time           Source                Destination           Protocol Length Info
     25 28.672351000   192.168.1.111         192.168.1.135         TCP      62     [TCP Previous segment not captured] ov-nnm-websrv > 58042 [SYN, ACK] Seq=2364815 Ack=1 Win=65535 Len=0 MSS=1460 SACK_PERM=1

Frame 25: 62 bytes on wire (496 bits), 62 bytes captured (496 bits) on interface 0
Ethernet II, Src: IntelCor_8d:95:bf (00:18:de:8d:95:bf), Dst: Netgear_0a:0a:b1 (e0:46:9a:0a:0a:b1)
Internet Protocol Version 4, Src: 192.168.1.111 (192.168.1.111), Dst: 192.168.1.135 (192.168.1.135)
Transmission Control Protocol, Src Port: ov-nnm-websrv (3443), Dst Port: 58042 (58042), Seq: 2364815, Ack: 1, Len: 0

No.     Time           Source                Destination           Protocol Length Info
     26 28.674067000   192.168.1.135         192.168.1.111         TCP      54     58042 > ov-nnm-websrv [RST] Seq=1 Win=0 Len=0

Frame 26: 54 bytes on wire (432 bits), 54 bytes captured (432 bits) on interface 0
Ethernet II, Src: Netgear_0a:0a:b1 (e0:46:9a:0a:0a:b1), Dst: IntelCor_8d:95:bf (00:18:de:8d:95:bf)
Internet Protocol Version 4, Src: 192.168.1.135 (192.168.1.135), Dst: 192.168.1.111 (192.168.1.111)
Transmission Control Protocol, Src Port: 58042 (58042), Dst Port: ov-nnm-websrv (3443), Seq: 1, Len: 0

Während der Server mir wieder das hier gab:

run:
New Server Socket(port: 3443) initiated
Server Waiting for new Client's...
New Client tries to connect: Socket[addr=/192.168.1.135,port=58042,localport=3443]
java.net.SocketException: Connection reset
Server Waiting for new Client's...
	at java.net.SocketInputStream.read(SocketInputStream.java:196)
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)
New Client tries to connect: Socket[addr=/192.168.1.135,port=58042,localport=3443]
Server Waiting for new Client's...
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:196)
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)
New Client tries to connect: Socket[addr=/192.168.1.135,port=58042,localport=3443]
Server Waiting for new Client's...
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:196)
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2310)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)

Es waäre ZU nett wenn sich jemand das noch einmal angucken könnte!! :slight_smile:

Das bestätigt, was auch das Log Deines Servers vermuten lässt. Der Client bricht durch senden eines [RST] die Verbindung ab. Interssant zu wissen wäre übrigens, auf welchem der Rechner Du den Trace erstellt hast. Falls der Trace vom Client kommt, würde ich ein Dazwischenfunken einer Statefull (Desktop-)Firewall sicher ausschließen. Die Pakete davor sehen wie ein anständiger TCP-Verbindungsaufbau aus: Client sendet [SYN], Server sendet [SYN,ACK] zurück das ist das, was eine Firewall sehen will. Nur statt dem letzten ACK des Clients kommt leider das [RST]…

@nillehammer
Log ist vom Server! Ich hab nur die Pakete gelistet die mit dem 3443 Port zutun haben!
Wie kann ich den nun den Client das ACK statt des [RST] senden lassen???
Ähh und ich meine Irgendwo muss mir doch irgendwas die fehlenden, nicht gesendeten Pakete wegblocken! Denn localhost funktioniert ja alles…
Oder hab ich da etwas falsch verstanden?

*** Edit ***

Übrigens:
Wenn ich im KSKB(auf beiden Seiten) outputStream und inputStream Konstruktor umdrehe bekomme ich(falls public domain benutzt, localhost funktioniert immer noch wunderbar) folgenden OUTPUT:

New Server Socket(port: 3443) initiated
Server Waiting for new Client's...
New Client tries to connect: Socket[addr=/192.168.1.111,port=1530,localport=3443]
java.net.SocketException: Connection reset by peer: socket write error
Server Waiting for new Client's...
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
	at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1876)
	at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1785)
	at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:247)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)
New Client tries to connect: Socket[addr=/192.168.1.111,port=1530,localport=3443]
Server Waiting for new Client's...
java.net.SocketException: Connection reset by peer: socket write error
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
	at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1876)
	at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1785)
	at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:247)
	at server_kskb.Server_KSKB$MainServerThread.run(Server_KSKB.java:54)

Falls das irgendwas ändert?!

gar nicht - darum kümmert sich das Betriebssystem bzw. das Netzwerk

nimm bitte ein Loggingframework wo Du die Zeiten noch mit ausgeben kannst (inkl. Millisekunden). Die normalen Ausgaben werden nämlich gepuffert und die Fehlerausgaben kommen sofort. Dadurch verlierst Du in der Konsole die chronologische Reihenfolge der Meldungen (mit Zeitangabe siehst Du sie ja wieder).


Ich habe mir jetzt mal Deine KSKB angesehen

[ul]
[li]localhost - funktioniert
[/li][li]lokales Netzwerk (LAN) - funktioniert
[/li][li]lokales Netzwerk (VPN) - funktioniert
[/li][li]public IP - funktioniert
[/li][/ul]

Deine Quelltexte funktionieren also soweit. Kann wirklich sein das da dein Router zwischen funkt. Am besten mal vom Rechner aus einem anderen LAN (Freund oder so) probieren. Dann gehst Du nicht zweimal über Deinen Router (raus und wieder rein). Normalweise ist es so, wenn es im LAN von zwei verschiedenen Rechner funktioneirt, dann passt die Software. Weitere Probleme sind dann bei der verwendeten Hardware zu suchen (hier Dein Router).