java socket 简单问题
我刚接触 socket  找了本书,练习了一下,现在有几点不明白
网上一些例子写的都是长连接,客户端都是连接了一次,如果在连接期间,服务端关闭,怎么样让客户端定时每隔几秒连一次,直到服务端再打开?
我参考的客户端代码如下
import java.net.*;
import java.nio.channels.*;
import java.nio.*;
import java.io.*;
import java.nio.charset.*;
import java.util.*;
public class SocketClient {
   private static SocketChannel socketChannel = null;
   private int serverPort = 10000;
   private ByteBuffer sendBuffer = ByteBuffer.allocate(1024);
   private ByteBuffer receiveBuffer = ByteBuffer.allocate(1024);
   private Charset charset = Charset.forName("UTF-8");
   private Selector selector;
   private static boolean flag;
   public SocketClient() throws 
IOException {
       socketChannel = SocketChannel.open();
       InetAddress ia = InetAddress.getLocalHost();
       InetSocketAddress isa = new InetSocketAddress(ia, serverPort);
       try {
           flag = socketChannel.connect(isa);
           socketChannel.configureBlocking(false);
           System.out.println("与服务器的连接建立成功");
           selector = Selector.open();
       } catch (
SocketException ex) {
           System.out.println("connect error");
           return;
       }
   }
   public static void main(String args[]) throws IOException {
     final SocketClient client = new SocketClient();
     flag = socketChannel.isConnected();
     if(flag){
         Thread receiver = new Thread() {
             public void run() {
                 client.receiveFromUser();
             }
         };
         receiver.start();
         client.talk();
     }else{
         //重新连
--------------此段很模糊 自己乱加的--------
         Thread receiver2 = new Thread() {
            public void run() {
             try {
                 client.reConnect(flag);
             } catch (IOException ex) {
             }
            }
        };
        receiver2.start();
---------------------------------------
     }
   }    
   //重新连接
  public static void reConnect(boolean flag) throws IOException {
      while(!flag){
//         timer.schedule(new TimerTask() {
//          public void run() {
//            start();
//            timer.cancel();
//          }
//          public void start() {
//            try {
                 new SocketClient();
//            } catch (IOException ex) {
//            }
//          }
//        }, 6000, 6000);      
            flag = socketChannel.isConnected();
        }
------------连是连上了,可是得建立talk,还得用线程,可是线程里的对象一定是final的,所以等于连了两次----
        if (flag) {
            final SocketClient client2 = new SocketClient();
            Thread receiver = new Thread() {
                public void run() {
                    client2.receiveFromUser();
                }
            };
            receiver.start();
            client2.talk();
        }
------------------------------------------------
  }
   public void receiveFromUser() {
     try {
       BufferedReader localReader = new BufferedReader(new InputStreamReader(
           System.in));
       String msg = null;
       while ( (msg = localReader.readLine()) != null) {
           if ( msg.length() < 1) {
               System.out.println("null");
               msg = "syn";
           }
         synchronized (sendBuffer) {