我想从键盘读取字符串发送给服务器端,然后做个简单的处理(反序排列),然后回传给客户端,但是客户端这边却一直得不到回传的数据,请高手指点下,是哪里写错了. //服务器端 
import java.net.Socket; 
import java.net.ServerSocket; 
import java.io.OutputStream; 
import java.io.InputStream; 
import java.io.BufferedWriter; 
import java.io.BufferedReader; 
import java.io.OutputStreamWriter; 
import java.io.InputStreamReader; class Servicer implements Runnable 

  Socket s; 
  public Servicer(Socket s) 
  {
    this.s=s; 
  } 
  public void run() 
  { 
    try 
    { 
      OutputStream os=s.getOutputStream(); 
      OutputStreamWriter osw=new OutputStreamWriter(os); 
      BufferedWriter bw=new BufferedWriter(osw);       InputStream is=s.getInputStream(); 
      InputStreamReader isr=new InputStreamReader(is); 
      BufferedReader br=new BufferedReader(isr); 
      while(true) 
      { 
        String str=br.readLine(); 
        if(str.equalsIgnoreCase("quit")) 
        { 
        break; 
        } 
        bw.write(str+"---->"); 
        str=new StringBuffer(str).reverse().toString(); 
        bw.write(str);         bw.close(); 
        br.close(); 
        s.close(); 
      } 
    } 
    catch(Exception e) 
    { 
    System.out.println(e.getMessage()); 
    } 
  } 

class Test 

  public static void main(String []args) throws Exception 
  { 
    ServerSocket ss=new ServerSocket(8001); 
    while(true) 
    { 
      Socket s=ss.accept(); 
      new Thread(new Servicer(s)).start(); 
    } 
  } 

//客户端 
import java.net.Socket; 
import java.net.ServerSocket; 
import java.io.OutputStream; 
import java.io.InputStream; 
import java.io.BufferedWriter; 
import java.io.BufferedReader; 
import java.io.OutputStreamWriter; 
import java.io.InputStreamReader; 
import java.net.InetAddress; class ClientTest 

  public static void main(String []args) throws Exception 
  { 
    if(args.length <2) 
    { 
      System.out.println("请输入服务器IP地址和端口"); 
    } 
  
    Socket s=new Socket(args[0],Integer.parseInt(args[1])); 
    OutputStream os=s.getOutputStream(); 
    OutputStreamWriter osw=new OutputStreamWriter(os); 
    BufferedWriter bw=new BufferedWriter(osw);     InputStream is=s.getInputStream(); 
    InputStreamReader isr=new InputStreamReader(is); 
    BufferedReader br=new BufferedReader(isr);  
  
    InputStreamReader isr1=new InputStreamReader(System.in); 
    BufferedReader br1=new BufferedReader(isr1); 
  
    while(true) 
    { 
      String str=br1.readLine();//从键盘读取字符串 
       if(str.equalsIgnoreCase("quit")) 
      { 
        break; 
      } 
      bw.write(str); 
      System.out.println(br.readLine()); 
    } 
    bw.close(); 
    br.close(); 
    br1.close(); 
    s.close();   
  } 
}

解决方案 »

  1.   

    改好了,关键是你的readline有问题,因为你readLine()进来的是没有换行符的,所以发过去对方readline一直在等待换行,在write()后面加个newLine()就好了,其他的还修改了一些小毛病,楼主自己看吧。服务端:import java.net.Socket;
    import java.net.ServerSocket;
    import java.io.*;public class Servicer implements Runnable
    {
        Socket s;
        
        public Servicer(Socket s)
        {
            this.s = s;
        }
        
        public void run()
        {
            BufferedWriter bw = null;
            BufferedReader br = null;
            try
            {
                bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                
                while (true)
                {
                    String str = br.readLine();
                    if (str.equalsIgnoreCase("quit"))
                    {
                        break;
                    }
                    bw.write(str + "---->");
                    str = new StringBuffer(str).reverse().toString();
                    bw.write(str);
                    bw.newLine();
                    bw.flush();
                }
            }
            catch (Exception e)
            {
                System.out.println(e.getMessage());
            }
            finally
            {
                try
                {
                    if(bw != null)
                    {
                        bw.close();
                    }
                    if(br != null)
                    {
                        br.close();
                    }
                    if(bw != null)
                    {
                        s.close();
                    }
                }
                catch(IOException e1)
                {
                    
                }
            }
        }
        
        public static void main(String[] args) throws Exception
        {
            ServerSocket ss = new ServerSocket(8001);
            while (true)
            {
                Socket s = ss.accept();
                new Thread(new Servicer(s)).start();
            }
        }
    }
    客户端:import java.net.Socket;
    import java.io.BufferedWriter;
    import java.io.BufferedReader;
    import java.io.OutputStreamWriter;
    import java.io.InputStreamReader;public class ClientTest
    {
        public static void main(String[] args) throws Exception
        {
            if (args.length < 2)
            {
                System.out.println("请输入服务器IP地址和端口");
                return;
            }
            
            Socket s = new Socket(args[0], Integer.parseInt(args[1]));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
            
            while (true)
            {
                String str = br1.readLine();// 从键盘读取字符串
                bw.write(str);
                bw.newLine();
                bw.flush();
                if (str.equalsIgnoreCase("quit"))
                {
                    break;
                }
                System.out.println(br.readLine());
            }
            bw.close();
            br.close();
            br1.close();
            s.close();
        }
    }