使用socket服务开启一个Tcp server后开线程监听多个客户端的连接。要求服务器断开后,可以立即再启动。并且我断开服务器socket后,客户端能与服务器再联接,问各位高手,如何解决这个问题!例如:服务器端:package server;import java.net.*;
import java.io.*;public class MyServer extends Thread { /**
 * @param args
 */
private Socket client;
public MyServer(Socket client){
this.client = client;
}

public void run(){

try {

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());

while(true){
String str=in.readLine();
System.out.println(str);
out.println(str + " has receive....");
out.flush();
if(str.trim().equals("end"))
                  break;
}

client.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

ServerSocket server = new ServerSocket(9100);

while(true){

MyServer Multi = new MyServer(server.accept());
Multi.start();
} }

}客户端:package client;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;public class Client { /**
 * @param args
 */



public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub


Socket client=new Socket(InetAddress.getLocalHost(),9100);
  
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
  
while(true){
   String str=wt.readLine();
   out.println(str);
   out.flush();
   if(str.trim().equals("end")){
    break;
   }
   System.out.println(in.readLine());
}
    client.close();
    


}}

解决方案 »

  1.   

    断开服务器socket后,客户端能与服务器再联接
    ------------------------
    什么意思?是不是就是说服务器重启一下和没重启前保持一样的状态?
    在断开服务器连接前把各个客户端的套接字保存下来,然后重启后读那个状态然后恢复。
    properties类。
      

  2.   

    you can't do that in TCP protocal, cause TCP persistent connection has handshakes between client and server, try to use UDP, and that would be helpful