学习Socket通信,基于TCP协议编写了一个服务器端和客户端程序,
目的就是服务器端和客户端分别输出对方发来的字符串。
代码分别如下:import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;public class Server {   public static void main(String args[]) throws IOException,SocketException
   {
      ServerSocket server=new ServerSocket(8000);
      System.out.println("服务器已经启动......");
      Socket s=server.accept();
      InputStream in=s.getInputStream();
      
      BufferedReader br=new BufferedReader(new InputStreamReader(in));
      System.out.println(br.readLine());
      
      OutputStream out=s.getOutputStream();
      out.write("welcome to visit Server".getBytes());
      out.flush();
      
      br.close();
      s.close();
      server.close();          
   }
    
}客户端代码如下:
import java.io.*;
import java.net.*;public class Client {   public static void main(String args[]) throws IOException,SocketException
   {
      Socket client=new Socket("127.0.0.1",8000);
      
      OutputStream out=client.getOutputStream();
      out.write("hello Server".getBytes());
      out.flush();
     
      InputStream in=client.getInputStream();
      BufferedReader br=new BufferedReader(new InputStreamReader(in));
     
      System.out.println(br.readLine());
      
      out.close();
      br.close();
      client.close();     
   }  
    
}在命令提示符窗口中先启动服务器端程序,然后在另一窗口中启动客户端程序,
运行的结果是两段都处于阻塞状态了,没有输出对方发来的字符串,请问原因是什么,程序如何修改?
请高手指点,,,,谢谢了 急盼回复。。

解决方案 »

  1.   

    客户端在发送信息时,把回车换行符也加上  OutputStream out=client.getOutputStream();
      out.write("hello Server\r\n".getBytes());
      out.flush();
    服务器端也同样
      

  2.   

    两个程序BufferedReader br=new BufferedReader(new InputStreamReader(in));
    改为BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    in为类System的常量。
    由于两个程序没有采用循环,因此服务器可接受到hello Server,客户机可接受到welcome to visit Server各一次OK!
      

  3.   

    ReadLine的特性:只有读到换行符才算读到一次数据,所以你的Server会堵塞,因为一直读不到换行。所以你要在字符串后加换行符。即
     out.write("welcome to visit Server\n".getBytes());
    out.write("hello Server\n".getBytes());
      

  4.   

    呵呵,3楼已经把原因说明了,ReadLine()方法是遇到换行符才会返回,否则一直阻塞。