在java中发送一个int。有时导致异常?

时间:2011-03-15 14:52:01

标签: java sockets exception dataoutputstream

确定我将一个java程序从一个java程序发送到另一个程序(在同一台计算机上)。 但是,有时我会得到一个例外,它不会连接:

  

线程“main”中的异常java.net.ConnectException:连接被拒绝:连接       at java.net.PlainSocketImpl.socketConnect(Native Method)       在java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)       在java.net.PlainSocketImpl.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();

这很奇怪,因为有时它会起作用,有时候不行。有没有人有任何想法?

2 个答案:

答案 0 :(得分:1)

引自the description of the exception

“表示尝试将套接字连接到远程地址和端口时发生错误。通常,远程拒绝连接(例如,没有进程正在侦听远程地址/端口)。”

最有可能的是没有人在听这个端口。您的服务器代码似乎接受一个连接然后关闭,因此除非您为每个连接重新启动服务器,否则这是您最可能的原因。如果没有,请检查您的服务器应用程序是否正在运行。

答案 1 :(得分:1)

如果你:

,我打赌你会收到这个错误
  1. 启动您的服务器
  2. 启动您的客户
  3. 再次启动客户端,无需重新启动服务器
  4. 您的服务器只接受一个连接,然后终止。

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

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

    在为请求提供服务后,它将再次收听另一个请求或等待请求。