user3469811
user3469811

Reputation: 678

TCP-Server wont print/receive data from remote client

I am facing a strange problem, local client tcp-connections (python) to my tcp-server (java, on windows 8 64-bit) are working. For example

Python client.py

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.2.108", 30000))
s.sendall('Hello, server')
s.close()

successfully connects to 192.168.2.108 at port 30000, and the server prints "Hello, server" on eclipse's console.

If I change the interface to loopback interface, it works too.

If I use the same script on my remote Linux machine (Arch with 3.18.6 kernel, 32-bit, ip: 192.168.2.104) the server won't print out anything.

If I try to connect via nc 192.168.2.108 30000 on my client -> same problem

If I try to connect via telnet 192.168.2.108 30000 on my client -> same problem (telnet: connection timed out)

Here a piece of code which might be important for the problem. The backstory is, the server creates 3 serverSockets with ports 30000, 40000, 50000 each in its own thread.

TCP.java

[...]

// pseudo-code: List<ServerSocket> serverSockets = {serverSocket1 port 30000,   
// serverSocket2 port 40000, serverSocket3 port 50000}

[...]

for(ServerSocket serverSocket : serverSockets){
new Thread(new TCPRunnable(serverSocket)).start();
}

[...]

TCPRunnable.java

[...]

public TCPRunnable(ServerSocket serverSocket) {
    this.serverSocket = serverSocket;
}

public void run() {
    long threadId = Thread.currentThread().getId();
    System.out.println(threadId + ": " + serverSocket);
    // output: 20: ServerSocket[addr=0.0.0.0/0.0.0.0,localport=30000]
    try {
        System.out.println("before accept()");

        while(true){
            System.out.println("before accept() in while-loop");
            Socket socket = serverSocket.accept();
            String message = readMessage(socket);
            System.out.println(threadId + ": " + message );
        }
    } catch (IOException e) {
        e.printStackTrace();
    }  catch (SecurityException e) {
        e.printStackTrace();
    }
    System.out.println("leaving run");
}

[...]

output of `netstat -a | find "30000" to see that the port(s) are listening

TCP    0.0.0.0:30000          be-dsktp:0             LISTENING
TCP    [::]:30000             be-dsktp:0             LISTENING

I hope someone can help. Thanks in advance.

Upvotes: 0

Views: 613

Answers (1)

user3469811
user3469811

Reputation: 678

Firewall was in the way. javaw.exe has to be allowed in firewall.cpl. Thanks Zielu!

Upvotes: 1

Related Questions