Java 客户端关闭连接
我有一个套接字侦听器,它一直在侦听数据。现在的问题是,发送数据的客户端最终将自行关闭连接。基于我下面的代码,我想知道我是否仍然需要在执行Java 客户端关闭连接,java,sockets,Java,Sockets,我有一个套接字侦听器,它一直在侦听数据。现在的问题是,发送数据的客户端最终将自行关闭连接。基于我下面的代码,我想知道我是否仍然需要在执行writeBuffer.close()的地方执行这部分代码 我是否应该移除最后一部分,然后将插座放在锁扣上 public void run() { BufferedWriter writeBuffer = null; BufferedReader readBuffer = null; String message="";
writeBuffer.close()的地方执行这部分代码代码>
我是否应该移除最后一部分,然后将插座放在锁扣上
public void run()
{
BufferedWriter writeBuffer = null;
BufferedReader readBuffer = null;
String message="";
try {
writeBuffer = new BufferedWriter(new OutputStreamWriter(receivedSocketConn1.getOutputStream()));
readBuffer = new BufferedReader(new InputStreamReader(receivedSocketConn1.getInputStream()));
int m = 0, count=0;
int nextChar=0;
while ((nextChar=readBuffer.read()) != -1)
{
message += (char) nextChar;
if (nextChar == '#')
{
System.out.println("\n\nSending PA : "+message);
writeBuffer.write("$PA\r\n");
writeBuffer.flush();
message="";
}
}
}
catch (Exception ex)
{
System.out.println("MyError:Exception has been caught in in the main first try");
ex.printStackTrace(System.out);
}
/*finally
{
try
{
if ( writeBuffer != null )
{
writeBuffer.close();
}
else
{
System.out.println("MyError:writeBuffer is null in finally close");
}
}
catch(IOException ex)
{
ex.printStackTrace(System.out);
}
}*/
}
明确地关闭正在使用的连接总是一个好主意。想想看,客户机可能永远不会关闭连接(当然,您必须实现某种超时机制,在一定时间后关闭服务器端的连接,但这是另一回事)
我的观点是——谨慎并以保守的方式管理您的资源是没有坏处的。那么,我应该进一步对代码进行哪些更改?根据您在我的场景中的经验,假设客户端将关闭连接,我应该怎么做?问题是,我的代码在大多数情况下运行正常,但突然间,我有时会发现一些垃圾,这是在连接即将结束时。您可以定义一条来自客户端的特殊消息,称为“退出”,这样,当您收到它时,您退出循环,让最后关闭连接。客户端的问题是gps设备。它的工作原理是,在发送所有数据后,15秒后,它将关闭与服务器的连接。您认为损坏可能是服务器比客户端更早关闭连接吗?我不知道,在您的代码中,while
退出的唯一方式是它接收到一个值-1
,这通常在客户端第一次关闭连接时发生。尝试删除finally
块中的部件,并查看它是否在15秒后仍然关闭显示以确认客户端已关闭连接?是通过监控流量还是通过java代码本身?我必须继续运行netstat-a吗?交叉发布到Oracle Java论坛:。