流写异常

时间:2012-09-22 05:54:46

标签: java sockets io

我正在进行套接字编程。我有两个名为Server.java和client.java的文件。两个程序都成功运行并成功地相互发送数据。昨天我将以下行添加到client.java文件中:

     //old line
     out.writeUTF(dbdata); //dbdata was written successfully and sent to the server program
     try
     {
          //my socket connection object name is sock
            String data1="1000";
            System.out.println(data1);
            out.writeUTF(data1);   this line causes the error
     }

     catch(Exception e)
     {
            System.out.println("Exception :: "+e);
     }

执行out.writeUTF(data1)行时,catch捕获它并将异常显示为BROKEN PIPE。

读取data1的server.java的内容如下:

     String data1;
     try
     {
            data1=in.readUTF();
     }
     catch(Exception e)
     {
            System.out.println("Server Exception :: "+e);
     }

我还检查了在out.writeUTF(data1)之前是否使用isConnected()打开了连接,并且在catch执行isConnected()之后发生了异常。它只显示True的时间。

2 个答案:

答案 0 :(得分:1)

'断管'表示您已写入已被另一端关闭的连接。换句话说,应用程序协议错误。缓解不是通过修复此端来实现的,因为它不会写入不需要的数据,或者修复另一端以便读取所有想要的数据。

答案 1 :(得分:1)

@EJP是对的。该异常意味着套接字在写入调用完成之前关闭,并且可能在它开始之前关闭。无法知道有多少数据传递到另一端。

谜题的另一部分是isConnected()返回true的原因。这由javadoc解释说:

  

“注意:关闭套接字不会清除其连接状态,这意味着如果在关闭之前成功连接,则此方法将对已关闭的套接字返回true(请参阅isClosed())。” EM>