2012-09-22 64 views
0

我正在做套接字编程。我有两个名为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)被执行和捕获捕获它,并显示异常作为破裂的管道。

server.java的内容读取DATA1下面给出:

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

我还检查是否连接与out.writeUTF(DATA1)之前isConnected()打开和在catch发生异常后我执行isConnected()。这两个时间只表明真实。

+0

什么是例外? – Makoto

+0

异常是----- java.net.SocketException:损坏的管道 – user1673627

+0

isConnected()不会告诉您连接是否仍然运行。它告诉你这个插座是否连接过。这不是一回事。 – EJP

回答

1

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

难题的另一部分是为什么isConnected()返回true。这是由javadoc它说解释说:

“注:关闭套接字不清除它的连接状态,这意味着这种方法会为一个封闭的插座返回true(见isClosed()),如果它是在关闭之前成功连接。“

1

“断开的管道”表示您已写入已由另一端关闭的连接。换句话说,应用程序协议错误。缓解不是要做到这一点,要么通过修复这一端,以便它不写入不需要的数据,或修复另一端,以便读取所有需要的数据。