首页 新闻 会员 周边 捐助

java网络编程中IO数据输入输出问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2015-05-27 14:12

服务端代码如下:

public class Server {
  public static void main(String[] args) throws IOException {
    ServerSocket ss = new ServerSocket(30000);
    Socket socket = ss.accept();
    PrintStream ps = new PrintStream(socket.getOutputStream());

    ps.println("服务器第一行数据");   //1
    ps.println("服务器第二行数据");   //2

    ocket.shutdownOutput();         //3
    //下面语句将输出false
    System.out.println(socket.isClosed());

    Scanner scan = new Scanner(socket.getInputStream());

    BufferedReader br = new BufferedReader(new     InputStreamReader(socket.getInputStream()));


    //为什么只得到客户端第一条数据
    if(scan.hasNext()) {
      System.out.println(scan.nextLine());
    }

    //为什么此处得不到数据
     while(br.readLine() != null) {
      System.out.println(br.readLine());
    }

    scan.close();
    br.close();
    socket.close();
    ss.close();

    }
}

 

客户端代码如下:

public class Client {
  public static void main(String[] args) throws IOException {
    Socket s = new Socket("localhost", 30000);
    Scanner scan = new Scanner(s.getInputStream());
    // 为什么只能得到服务端第一条数据
    if (scan.hasNextLine()) {
      System.out.println(scan.nextLine());
    }
    PrintStream ps = new PrintStream(s.getOutputStream());
    ps.println("客户端的第一行数据");
    ps.println("客户端的第二行数据");
    ps.close();
    scan.close();
    s.close();
  }
}

 

服务端运行结果:

false
客户端的第一行数据

 

客户端运行结果:

服务器第一行数据

 

如上述所示,服务端在 //1,//2处已经将数据输出到socket输出流了,在//3处才关闭输出功能,为什在客户端得到的数据只能显示一条

 

同样,客户端输出了两条数据,在服务端关闭输出,输入功能应该不收影响,为什么也只能得到一条数据。

菜园蜗牛的主页 菜园蜗牛 | 菜鸟二级 | 园豆:204
提问于:2015-05-27 10:23
< >
分享
所有回答(1)
0

需要读取所有的信息,应该用while循环去读,还不是用if判断!没看清,大意了

菜园蜗牛 | 园豆:204 (菜鸟二级) | 2015-05-27 14:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册