客服端和服务器刚开始的时候都能正常运行,当客服端向服务器端成功发送一个消息后,服务器端能正常显示客服端发送的消息,但是在此之后整个程序就停在那里了,不能再往下运行。
大家给点帮助!!(代码附在后边)
谢谢!

解决方案 »

  1.   

    客服端代码:
    import java.net.*;
    import java.io.*;
    import java.lang.*;public class client implements Runnable{
      public static void main(String args[]) {
       if(args.length<1)
       {
    System.out.println("you forget the name of the server");
    System.out.println("see also: myclient aaa");
    System.exit(1);
     }
     
       Socket s;
       BufferedReader input;
       BufferedReader in;
       OutputStreamWriter out;
       String s1;
       int length;
     char[] buffer = new char[2048];
     String s2;
       
       try {
        //创建socket对象
        s = new Socket(args[0],4321);
       while (true) {
        //获得输入输出流
        in  = new BufferedReader(new InputStreamReader(s.getInputStream()));
        out = new OutputStreamWriter(s.getOutputStream());
        //获得键盘输入
        input = new BufferedReader(new InputStreamReader(System.in));
        //向服务器发送信息
        if ((s1 = input.readLine()).length()!=0) {
           out.write(s1);
           out.flush();
        }     
        //读取服务器端的信息
        //if ((s1 = in.readLine()).length()!=0){
          // System.out.println(s1);
        //}
        while((length= in.read(buffer))!=-1) {
          s2 = new String(buffer,0,length);
          System.out.println(2);
      }
      out.close();
        in.close();
        s.close();
       }
        //关闭数据流
       
       
      }
      catch (Exception e) {
        System.out.println(e.getMessage());
      }
      }
    }
      

  2.   

    服务器端代码:
    import java.net.*;
    import java.io.*;
    import java.lang.*;
    public class server
    {
    public static void main(String args[])
    {
    ServerSocket server;
    Socket so;
    BufferedReader in;
    OutputStreamWriter out;
    int length;
    char[] buffer = new char[2048];
    String s;

    try {
    server = new ServerSocket(4321);
    while(true) {
       //等待连接
       so = server.accept();
       //建立连接后创建输入输出流
       in = new BufferedReader(new InputStreamReader(so.getInputStream()));
       out = new OutputStreamWriter(so.getOutputStream());
       //在输出流写入信息
       //out.write("hello");
       //out.flush();
       //显示客服端信息
       while((length= in.read(buffer))!=-1) {
          s = new String(buffer,0,length);
          System.out.println(s);
      }
      out.close();
      in.close();
      so.close();
    }
    }
    catch (Exception e) {
       System.out.println(e.getMessage());
    }
    }
    }
      

  3.   

    建议用进程处理,我觉得是一直等待接受的数据,
    Thread input = new InputThread(connection.getInputStream());
    input.start();
    Thread output = new OutputThread(connection.getOutputStream());
    output.start();
    try{
    input.join();
    output.join();
    }class InputThread extends Thread{
        public void run(){
     in  = new BufferedReader(new InputStreamReader(s.getInputStream()));
        out = new OutputStreamWriter(s.getOutputStream());
        //获得键盘输入
        input = new BufferedReader(new InputStreamReader(System.in));
        //向服务器发送信息
        if ((s1 = input.readLine()).length()!=0) {
           out.write(s1);
           out.flush();
        }     
        //读取服务器端的信息
        //if ((s1 = in.readLine()).length()!=0){
          // System.out.println(s1);
        //}
        while((length= in.read(buffer))!=-1) {
          s2 = new String(buffer,0,length);
          System.out.println(2);
      }
      out.close();
        in.close();
        s.close();
    }class OutputThread extends Thread{
    类似client  显示数据
    }}
      

  4.   

    in.read(buffer)  这个方法是个堵塞方式读取IO ,一直等读到下一个数据或者IO 被close掉或者发生异常 。client端程序:
    while((length= in.read(buffer))!=-1) {
          s2 = new String(buffer,0,length);
          System.out.println(2);
      }
    这个一直等待做什么用? 
    client 一直等SERVER 发完消息, server close后 in.read才会等于-1 ,才会client close
    server 一直等close  发完消息 ,client close 后in.read才会等于-1 ,才会server close
     
     两边永远都等不到 -1 的时候,