1:socket关闭的问题
          try
{
client.close();
}catch(IOException e)
{
e.printStackTrace();
}
System.out.println(client.isConnected());//client是一个socket
输出的时候显示true
表示还在连接换成System.out.println(client.isClosed());
显示false
表示client没有被关闭
?????????????????????????????????????????
2:使用如下代码实现断开重连服务器
while(nowClient.getMySocket().isClosed())
{
         System.out.println("Thread is dead!");
try {
nowClient = new Client();

                  getMsgThread = new Thread(new ServerMsgCollectThread(nowClient.getMySocket()));
sendMsgThread = new Thread(new ClientMsgSendThread(nowClient.getMySocket()));

getMsgThread.start();
sendMsgThread.start();

} catch (Exception e) {
System.out.println("输入的IP地址错误");
}无效
nowClient.getMySocket().isClosed()可能是由于第一个问题socket被关闭后isClosed还显示false的原因

解决方案 »

  1.   

    我以前也出现过这样的问题,建议你写一个长连接,所有的socket传输都用Singleton(单态模式)来实例化,另外多加一个心跳线程来检测socket传输是否正常,如果出现异常则重连。心跳线程的间隔时间可根据自己的要求来设定。
      

  2.   

    看你的程序是Client的断线重连检测!你一点具体的东西都没贴出来,没办法分析!如果其他部分没错误的话,你试试把这两个线程同步一下试试getMsgThread = new Thread(new ServerMsgCollectThread(nowClient.getMySocket()));
    sendMsgThread = new Thread(new ClientMsgSendThread(nowClient.getMySocket()));
      

  3.   

    多谢重连问题我们暂且不讨论主要问题是服务器明明关闭了,但是我这里client.isClosed()还是返回false,而且在一段时间内表现出来的都是返回false(我在用Eclipse的Debug功能时得到的结果都显示nowClient不是一个null值,而且nowClient.getMySocket()也不是null)这里nowClient是一个客户端的实例,nowClient.getMySocket()返回的是客户端的连接socket
      

  4.   

    问题解决
    调用client.close();后,socket的isClosed属性确实是true重连问题调用判断socket是否为null来执行操作,在main线程里执行,