套接字网络仅适用于localhost

时间:2014-11-01 18:29:42

标签: java sockets network-programming connectexception

我创建了两个独立的程序,一个客户端和一个服务器。我尝试在eclipse中测试它们并在同一台(Windows)机器(localhost)上作为runnable jar运行。它完全按照预期工作。

然而,当我将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内容(确实有效,因为它适用于localhost)。

编辑: 我添加了请求的代码。我也尝试过两台位于同一网络上的计算机(本地IP 192.168.1。*)。它奏效了。

1 个答案:

答案 0 :(得分:-1)

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

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

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

相关问题