我正在进行套接字编程。我有两个名为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的时间。
答案 0 :(得分:1)
'断管'表示您已写入已被另一端关闭的连接。换句话说,应用程序协议错误。缓解不是通过修复此端来实现的,因为它不会写入不需要的数据,或者修复另一端以便读取所有想要的数据。
答案 1 :(得分:1)
@EJP是对的。该异常意味着套接字在写入调用完成之前关闭,并且可能在它开始之前关闭。无法知道有多少数据传递到另一端。
谜题的另一部分是isConnected()
返回true
的原因。这由javadoc解释说:
“注意:关闭套接字不会清除其连接状态,这意味着如果在关闭之前成功连接,则此方法将对已关闭的套接字返回true(请参阅isClosed())。” EM>