【问题标题】:Sending an int in java. Sometime causing an Exception?在java中发送一个int。有时会导致异常?
【发布时间】:2011-07-15 20:56:20
【问题描述】:

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

线程“主”java.net.ConnectException 中的异常:连接被拒绝:连接 在 java.net.PlainSocketImpl.socketConnect(本机方法) 在 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();

这很奇怪,因为有时它会起作用,有时却不起作用。有没有人知道为什么?

【问题讨论】:

  • 附注:使用后记得关闭 DataOutputStream。
  • 您确定服务器套接字在使用套接字时正在监听?
  • 创建socket的时候报错,所以有时会因为没有服务器而失败。
  • 请发布异常的根本原因
  • 另外,你知道你的服务器代码在死前只会处理一个客户端,对吧? (至少从您向我们展示的内容来看)。

标签: java sockets exception dataoutputstream


【解决方案1】:

引用the description of the exception:

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

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

【讨论】:

  • 服务器端似乎缺少一个循环来接受任意数量的连接,直到关闭。
【解决方案2】:

我敢打赌,如果您遇到此错误:

  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();
}

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

【讨论】:

  • 只是说我解决了这个问题。问题是在错误的时间关闭套接字并尝试....catch 内捕获。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多