套接字网络只适用于localhost

套接字网络只适用于localhost

问题描述:

我已经创建了两个独立的程序,一个客户端和一个服务器。我试着在eclipse中测试它们,并在同一台(Windows)机器上运行(如本地主机)上的可运行jar。它完全按照它应该的那样工作。套接字网络只适用于localhost

但是,当我将clinet(和后来的服务器)发送给我的一个朋友来测试它时,它不起作用。我们确保端口是开放的(即使在客户端),但无济于事。它没有工作。我只会得到一个超时ConnectException。

我使用的插座是50178-50180。

我不知道该怎么想。任何想法可能会出错?

这是套接字代码:

(serverside) 
serverSocket = new ServerSocket(50178); 

while (true) 
{ 
    clientSocket = serverSocket.accept(); 

    streamOut = clientSocket.getOutputStream(); 
    objectOut = new ObjectOutputStream(streamOut); 
    streamIn = clientSocket.getInputStream(); 
    objectIn = new ObjectInputStream(streamIn); 

    (stuff) 
} 

(clientside) 
Socket socket = new Socket(ipAddress, 50178); 

OutputStream streamOut = socket.getOutputStream(); 
DataOutputStream dataOut = new DataOutputStream(streamOut); 
DataInputStream dataIn = new DataInputStream(socket.getInputStream()); 

我不包括代码的其余部分,因为它的I/O的东西(它确实工作,因为它工作在本地主机)。编号: 我添加了请求的代码。我也试过了两台电脑,它们在同一个网络上(女巫本地IP 192.168.1。*)。有效。

+0

运行服务器的人是否拥有公共IP地址?客户是否使用该地址? – Joni 2014-11-01 18:43:30

+0

是的,使用了公共IP。这是正确的。 – Karlovsky120 2014-11-01 23:12:34

您可能已经在这样做了,但我相信您必须致电serverSocket.accept()。这将告诉服务器它需要等待连接。

如果你这样做,我最好的答案是执行网络故障排除。计算机必须能够在局域网上看到彼此,才能够使用IP地址。确保没有防火墙或阻止连接的东西。

如果您可以添加客户端尝试连接的位置以及服务器接受连接的位置的代码,那可能会有帮助。

+1

未调用accept()不会导致连接超时。 – EJP 2014-11-01 22:02:37