我写了一个客户端,一个服务器类,运行正常,但是服务器端读不到客户端发送的消息。。客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.print("messge:");
String s = bf.readLine();
out.write(s);
out.flush();
}

} catch (UnknownHostException e) {

e.printStackTrace();
} catch (Exception e) {

e.printStackTrace();
}

}
}服务器端import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class Server {
public static void main(String[] args){
try {
ServerSocket  server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
System.out.println("ss");
s = in.readLine();
while(true){

     s = in.readLine();
     System.out.println(s);
    

     }
    
    
} catch (Exception e) {

e.printStackTrace();
}
}
}

解决方案 »

  1.   

    你读了2次,应该把代码:
    System.out.println("ss"); 
    s   =   in.readLine(); 
    修改成:
    System.out.println("ss"); 
      

  2.   

    public   class   Server   {
    public   static   void   main(String[]   args){
    try   {
    ServerSocket     server   =   new   ServerSocket(8000);
    Socket   socket   =   server.accept();
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream()));
    String   s   =   null;
    System.out.println("ss");
    s   =   in.readLine();    //如果客户端就发过来一行信息,这儿该可以打印信息了 
    while(true){        s   =   in.readLine();   //如果客户端只发过来一行信息,这句话会堵塞你的服务器端
            System.out.println(s);
                   }
           
           
    }   catch   (Exception   e)   {e.printStackTrace();
    }
    }
      

  3.   

    去掉
    while(true)中的"  s   =   in.readLine();   "即可
      

  4.   

    我来讲解下,能理解,就接下分(好像这个是解题的口头禅了哦^_^):
    首先说句你的程序只是想调试下socket的编程,想尝试下通信的刺激(这个理解,我也是这样过来的),但是你的写法很不和常理,
    解释下你的为什么服务器没解释到消息,(其实是接受到了,只是 没接到回车符号,就没out.println出来);
    看你的程序:
    [code]
    服务器代码片段:
    while(true){ 
            s   =   in.readLine(); //这里是读吧,直到读到以个回车吧
    //11标示  s=s+"\n";  加个回车符号不就好了?是的,
            System.out.println(s); 
             

    客户端片段:
    while(true){ 
    System.out.print("messge:"); 
    String   s   =   bf.readLine(); //这里是读,要用户输入吧,但是回车符不会独到s里面去吧,其实是这样的。
    out.write(s);   //这里就是吧s发出去吧,恩对 好问题来来了,就是,你没发送回车符,那你看看上面的服务器段的代码,你//是要读到回车符(in.readLine())吧 ,才把把他在服务器段输出吧。但是你没发送回车符啊?那服务器就一直读啊,所以 就//没打印出来,所以你就一位服务器没读到客户发的消息。  这个问题解决的办法是加上 11 标示 出代码
    out.flush(); 

    这样代码大概就是:
    服务器短:
    import   java.io.BufferedReader; 
    import   java.io.InputStreamReader; 
    import   java.net.ServerSocket; 
    import   java.net.Socket; class   Server   { 
    public   static   void   main(String[]   args){ 
    try   { 
        System.out.println("Server wait client connect to this:"); 
    ServerSocket     server   =   new   ServerSocket(8000); 
    Socket   socket   =   server.accept(); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
        String   s   =   null; 
    // int s;
    System.out.println("Server:"); 
    while((s   =   in.readLine())!=null){ 
            //s   =   in.readLine(); 
            System.out.println(s); 
    }        
    }catch(Exception   e)   { 
    e.printStackTrace(); 


    } 客户段:
    import   java.io.BufferedReader; 
    import   java.io.BufferedWriter; 
    import   java.io.InputStream; 
    import   java.io.InputStreamReader; 
    import   java.io.OutputStreamWriter; 
    import   java.net.Socket; 
    import   java.net.UnknownHostException; 
    import java.io.*;class   Client   { 
    public   static   void   main(String[]   args){ 
    Socket   socket; 
    try   { 
    socket   =   new   Socket("127.0.0.1",8000); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
    // PrintWriter   out   =   new PrintWriter(socket.getOutputStream(),true);
    BufferedWriter   out   =   new   BufferedWriter(new   OutputStreamWriter(socket.getOutputStream())); 
    BufferedReader   bf   =   new   BufferedReader(new   InputStreamReader(System.in)); 
    System.out.print("Client:"); 
    while(true){ 
    String   s   = bf.readLine(); 
    //out.println(s); 
    s=s+"\n";
    out.write(s);
    System.out.println("is???"+s);
    // out.println();
    out.flush(); 
    Thread.sleep(1000);

    }catch(Exception   e)   { 
    e.printStackTrace(); 




    //我只是稍微该了下你的代码,不好意,你自己吧关键几个错误哦的地方换为正确就可以了,上面的是调试了的我调试了的(不想误//人子弟^_^),其实想下如果用PringWriter的话就可以用out。println()去做了,不用再加个回车符了,看下面的代码我写的:import   java.io.BufferedReader; 
    import   java.io.BufferedWriter; 
    import   java.io.InputStream; 
    import   java.io.InputStreamReader; 
    import   java.io.OutputStreamWriter; 
    import   java.net.Socket; 
    import   java.net.UnknownHostException; 
    import java.io.*;class   Client   { 
    public   static   void   main(String[]   args){ 
    Socket   socket; 
    try   { 
    socket   =   new   Socket("127.0.0.1",8000); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
    PrintWriter   out   =   new PrintWriter(socket.getOutputStream(),true);
    BufferedReader   bf   =   new   BufferedReader(new   InputStreamReader(System.in)); 
    System.out.print("Client:"); 
    while(true){ 
    String   s   = bf.readLine(); 
    out.println(s);
    out.flush(); 
    Thread.sleep(1000);

    }catch(Exception   e)   { 
    e.printStackTrace(); 



    } import   java.io.BufferedReader; 
    import   java.io.InputStreamReader; 
    import   java.net.ServerSocket; 
    import   java.net.Socket; class   Server   { 
    public   static   void   main(String[]   args){ 
    try   { 
        System.out.println("Server wait client connect to this:"); 
    ServerSocket     server   =   new   ServerSocket(8000); 
    Socket   socket   =   server.accept(); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
        String   s   =   null; 
    System.out.println("Server:"); 
    while((s   =   in.readLine())!=null){ 
            System.out.println(s); 
    }        
    }catch(Exception   e)   { 
    e.printStackTrace(); 


    } [/code]
      

  5.   

    我来讲解下,能理解,就接下分(好像这个是解题的口头禅了哦^_^):
    首先说句你的程序只是想调试下socket的编程,想尝试下通信的刺激(这个理解,我也是这样过来的),但是你的写法很不和常理,
    解释下你的为什么服务器没解释到消息,(其实是接受到了,只是 没接到回车符号,就没out.println出来);
    看你的程序:服务器代码片段:
    while(true){ 
            s   =   in.readLine(); //这里是读吧,直到读到以个回车吧
    //11标示  s=s+"\n";  加个回车符号不就好了?是的,
            System.out.println(s); 
             

    客户端片段:
    while(true){ 
    System.out.print("messge:"); 
    String   s   =   bf.readLine(); //这里是读,要用户输入吧,但是回车符不会独到s里面去吧,其实是这样的。
    out.write(s);   //这里就是吧s发出去吧,恩对 好问题来来了,就是,你没发送回车符,那你看看上面的服务器段的代码,你//是要读到回车符(in.readLine())吧 ,才把把他在服务器段输出吧。但是你没发送回车符啊?那服务器就一直读啊,所以 就//没打印出来,所以你就一位服务器没读到客户发的消息。  这个问题解决的办法是加上 11 标示 出代码
    out.flush(); 

    这样代码大概就是:
    服务器短:
    import   java.io.BufferedReader; 
    import   java.io.InputStreamReader; 
    import   java.net.ServerSocket; 
    import   java.net.Socket; class   Server   { 
    public   static   void   main(String[]   args){ 
    try   { 
        System.out.println("Server wait client connect to this:"); 
    ServerSocket     server   =   new   ServerSocket(8000); 
    Socket   socket   =   server.accept(); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
        String   s   =   null; 
    // int s;
    System.out.println("Server:"); 
    while((s   =   in.readLine())!=null){ 
            //s   =   in.readLine(); 
            System.out.println(s); 
    }        
    }catch(Exception   e)   { 
    e.printStackTrace(); 


    } 客户段:
    import   java.io.BufferedReader; 
    import   java.io.BufferedWriter; 
    import   java.io.InputStream; 
    import   java.io.InputStreamReader; 
    import   java.io.OutputStreamWriter; 
    import   java.net.Socket; 
    import   java.net.UnknownHostException; 
    import java.io.*;class   Client   { 
    public   static   void   main(String[]   args){ 
    Socket   socket; 
    try   { 
    socket   =   new   Socket("127.0.0.1",8000); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
    // PrintWriter   out   =   new PrintWriter(socket.getOutputStream(),true);
    BufferedWriter   out   =   new   BufferedWriter(new   OutputStreamWriter(socket.getOutputStream())); 
    BufferedReader   bf   =   new   BufferedReader(new   InputStreamReader(System.in)); 
    System.out.print("Client:"); 
    while(true){ 
    String   s   = bf.readLine(); 
    //out.println(s); 
    s=s+"\n";
    out.write(s);
    System.out.println("is???"+s);
    // out.println();
    out.flush(); 
    Thread.sleep(1000);

    }catch(Exception   e)   { 
    e.printStackTrace(); 




    //我只是稍微该了下你的代码,不好意,你自己吧关键几个错误哦的地方换为正确就可以了,上面的是调试了的我调试了的(不想误//人子弟^_^),其实想下如果用PringWriter的话就可以用out。println()去做了,不用再加个回车符了,看下面的代码我写的:import   java.io.BufferedReader; 
    import   java.io.BufferedWriter; 
    import   java.io.InputStream; 
    import   java.io.InputStreamReader; 
    import   java.io.OutputStreamWriter; 
    import   java.net.Socket; 
    import   java.net.UnknownHostException; 
    import java.io.*;class   Client   { 
    public   static   void   main(String[]   args){ 
    Socket   socket; 
    try   { 
    socket   =   new   Socket("127.0.0.1",8000); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
    PrintWriter   out   =   new PrintWriter(socket.getOutputStream(),true);
    BufferedReader   bf   =   new   BufferedReader(new   InputStreamReader(System.in)); 
    System.out.print("Client:"); 
    while(true){ 
    String   s   = bf.readLine(); 
    out.println(s);
    out.flush(); 
    Thread.sleep(1000);

    }catch(Exception   e)   { 
    e.printStackTrace(); 



    } import   java.io.BufferedReader; 
    import   java.io.InputStreamReader; 
    import   java.net.ServerSocket; 
    import   java.net.Socket; class   Server   { 
    public   static   void   main(String[]   args){ 
    try   { 
        System.out.println("Server wait client connect to this:"); 
    ServerSocket     server   =   new   ServerSocket(8000); 
    Socket   socket   =   server.accept(); 
    BufferedReader   in   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
        String   s   =   null; 
    System.out.println("Server:"); 
    while((s   =   in.readLine())!=null){ 
            System.out.println(s); 
    }        
    }catch(Exception   e)   { 
    e.printStackTrace(); 


      

  6.   

    哈哈被人抢先答题了,
    怎么现在不支持代码编辑器了在是是
    [code]
    import java.lang.String;
    [/code]