服务器
public class Server1 {
private ServerSocket server; public Server1() {
try {
server = new ServerSocket(7);
} catch (IOException e) {
System.out.println(e);
}
}

public void run() {
System.out.println("Server starting...");
try {
Socket socket = server.accept();

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine, outputLine; while ((inputLine = in.readLine()) != null) {
outputLine = "Server1: " + inputLine;
out.println(outputLine);
if (inputLine.equals("exit")){
System.out.println("Server closed");
break;
}
}
out.close();
in.close();
socket.close();
server.close();
} catch (IOException e) {
System.out.println(e);

}

public static void main(String args[]){
Server1 myServer = new Server1();
myServer.run();
}
}客户端
public class Client {
private Socket socket;
private PrintWriter out;
private BufferedReader in;
private BufferedReader fromUser; public Client() {
        fromUser = new BufferedReader(new InputStreamReader(System.in));
}

public void run(){
try{
System.out.print("Choose a port please:");
String choice = fromUser.readLine();
socketSwitch(choice);

while(true){
String line = fromUser.readLine();
            if (line == null || line.equals("exit")) 
            {  
               out.println("exit");
               break;
            }
            if (line.equals("echo") || line.equals("myecho")){
             socketSwitch(line);
             continue;
            }
            out.println(line);
            System.out.println(in.readLine());
}
in.close();
out.close();
fromUser.close();
socket.close();
}catch(IOException e){

}
}

public void socketSwitch(String line){
int port = 0;

if(line.equals("echo")){
port = 7;
System.out.println("Client connects to port 7");
}
if(line.equals("myecho")){
port = 20001;
System.out.println("Client connects to port 20001");
}
try{
socket = new Socket("localhost", port);
        out = new PrintWriter(socket.getOutputStream(),true);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch(IOException e){

}
}

public static void main(String args[]){
Client myClient = new Client();
myClient.run();
}
}运行client后第一次可以连接上server,但是再次连接该server的时候就不能正常工作了,得关掉server重开才可以
请教解决的方法
谢谢

解决方案 »

  1.   

    把Server里的main()改了
    public static void main(String args[]){
    new Thread(){
    public void run()
    {
    while(true){
    Server1 myServer = new Server1();
    myServer.run();}
    }
    }.start();
    }
      

  2.   

    不行
    Choose a port please:echo
    Client connects to port 7
    hi
    Server1: hi
    echo
    Client connects to port 7
    hi
    hi
    hi
    再次用echo命令连接port7后,没有回音了
      

  3.   

    或者切换,也是这个问题
    Choose a port please:echo
    Client connects to port 7
    hi
    Server1: hi
    myecho
    Client connects to port 20001
    hoho
    Server2: hoho
    echo
    Client connects to port 7
    hi
    hi
    hi
    没回音
      

  4.   

    楼上的当然不行,现在的服务器是单线程的,一次只能有一个Client连接。
    我改的只是让一个Client关闭后,Server不会关闭。就像搂住说的那样
    如果要实现楼上的,当然要开多个线程或者用通道了
      

  5.   

    哦。了解了。。exit后,服务器重新启动暂时只能这样处理了,谢谢
      

  6.   

    这是多线程版本,把Server里的run()和main()都改了:
    public class Server1 {
    protected ServerSocket server; public Server1() {
    try {
    server = new ServerSocket(7);
    } catch (IOException e) {
    System.out.println(e);
    }
    }

    public void run(Socket _s) {
    Socket socket = _s;
    System.out.println("Server starting...");
    try {


    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String inputLine, outputLine;
    while ((inputLine = in.readLine()) != null) {
    outputLine = "Server1: " + inputLine;
    out.println(outputLine);
    if (inputLine.equals("exit")){
    System.out.println("Server closed");
    break;
    }
    }
    out.close();
    in.close();
    //socket.close();
    //server.close();
    } catch (IOException e) {
    System.out.println(e);

    }

    public static void main(String args[]){
    final Server1 myServer = new Server1();
    while(true){
    final Socket s;
    try {
    s = myServer.server.accept();
    new Thread(){
    public void run()
    {
    myServer.run(s);
    }
    }.start();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }}