server端serversocket=new ServerSocket(port);
socket=serversocket.accept();
BufferedReader  in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(socket.getOutputStream());
String msg=in.readLine();
out.println("connected");
System.out.println(msg);Client端socket=new Socket(host,port);
PrintWriter out=new PrintWriter(socket.getOutputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("connected");
msg=in.readLine();
System.out.println(msg);运行时输出为null, 大家帮忙看下是哪的问题?谢谢了

解决方案 »

  1.   

    你创建的PrintWriter 是没有自动刷新的,所以要手动刷新缓冲区
    你的客户端和服务器端分别在out.println("connected");后面加上out.flush();
    或者客户端和服务器端的PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
      

  2.   

    没什么问题阿,你做什么操作时候报的NULL?  只是上面贴的代码没有问题 看看你写的其他地方把
      

  3.   

    socket动作都有一个缓冲区
    你的输出流写的时候,先把数据写到这个缓冲区
    等待满足一定条件以后,缓冲区将数据写入到socket通道,发送出去
    一般有几种条件
    1.autoFlush机制,缓冲区达到一定大小后,自动提交
    2.手动flush,用stream.flush()方法提交
    3.在流关闭的时候,调用close()方法时提交缓冲区主要是为了避免过多的TCP动作设计的,这个你要去看看TCP/IP原理了
      

  4.   

    缓冲区的作用是将数据暂时存储在其中,等缓冲区满了,才会将数据输出。所以,在数据没有足够大的情况下,数据就会存储在缓冲流中而无法正常读出。为了防止出现这种情况,有了flush方法。该方法,是强制将缓冲流中的数据输出。当然,也可以用close方法,该方法也可以将其中的数据强制输出。
    所以,楼主需要用这两种方法,数据即可如期获得。