1

好的,我将一个 int 从一个 java 程序发送到另一个(此时在同一台计算机上)。但是,有时我会遇到异常并且无法连接:

线程“主”java.net.ConnectException 中的异常:连接被拒绝:在 java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 在 java.net.PlainSocketImpl 的 java.net.PlainSocketImpl.socketConnect(Native Method) 处连接。 connectToAddress(PlainSocketImpl.java:195) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 在 java.net.Socket.connect(Socket.java :529) 在 java.net.Socket.connect(Socket.java:478) 在 java.net.Socket.(Socket.java:375) 在 java.net.Socket.(Socket.java:189) 在 Client.main (Client.java:6)

下面是发送代码:

        Socket socket = new Socket("localhost" , 8080);
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeInt(5);
    socket.close();

并接收:

    ServerSocket serverSocket = new ServerSocket(8080);
    Socket socket = serverSocket.accept();

    DataInputStream din = new DataInputStream(socket.getInputStream());
    System.out.println(din.readInt());
            socket.close();

这很奇怪,因为有时它会起作用,有时却不起作用。有人对为什么有任何想法吗?

4

2 回答 2

1

Quoting from the description of the exception:

"Signals that an error occurred while attempting to connect a socket to a remote address and port. Typically, the connection was refused remotely (e.g., no process is listening on the remote address/port)."

Most likely is that nothing is listening to the port. Your server code appears to accept one connection and then shut down, so unless you are restarting the server for every connection this is your most likely cause. If not, check your server app is running.

于 2011-03-15T15:23:33.260 回答
1

我敢打赌,如果您:

  1. 启动你的服务器
  2. 启动您的客户
  3. 再次启动客户端,无需重新启动服务器

您的服务器只接受一个连接,然后终止。

如果您想接受无限数量的顺序连接,请使用如下循环围绕您的服务器代码:

ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
  Socket socket = serverSocket.accept();
  DataInputStream din = new DataInputStream(socket.getInputStream());      
  System.out.println(din.readInt());              
  socket.close();
}

在处理一个请求后,它将再次侦听另一个请求或接受等待请求。

于 2011-03-15T15:41:10.540 回答