Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端关闭连接_Java_Sockets - Fatal编程技术网

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论坛:。