• 周五. 12月 2nd, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

java 26

admin

11月 28, 2021

上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流。

优化:

  A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流。

  B:这次,传输的数据是通过键盘录入的数据。

服务器端代码:

  

 1 /*
 2  TCP协议:
 3  服务器端
 4  */
 5 public class ServerDemo {
 6     public static void main(String[] args) throws IOException {
 7 
 8         // 创建socket接收端对象监听
 9         ServerSocket ss = new ServerSocket(10010);
10         
11         // 创建socket对象
12         Socket s = ss.accept();
13         
14         // 创建输入流,由于客户端发送过来的是字符流,而通道的流是字节流
15         // 所以需要对通道里的字节流包装下 (socket的字节流 → 转换流 → 高效字符流)
16         BufferedReader br = new BufferedReader(new InputStreamReader(
17                 s.getInputStream()));
18         
19         // 由于是高效字符流了,所以一次性读取一行
20         String line = null;
21         while ((line = br.readLine()) != null) {
22 
23             System.out.println(line);
24         }
25         
26         // 释放资源
27         s.close();
28     }
29 }

客户端:

 1 /*
 2  TCP传输:
 3  发送键盘录入的数据到服务器端
 4  */
 5 public class ClientDemo {
 6     public static void main(String[] args) throws IOException {
 7 
 8         // 创建socket对象
 9         Socket s = new Socket("172.19.12.233", 10010);
10 
11         // 创建键盘输入流 InputStreamReader 是字节流通向字符流的桥梁
12         BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
13         
14         // 由于TCP传输中,信息传输是字节流,所以要对它进行包装成字符流
15         // 把socket的字节输出流通过转换流包装成高效字符输出流
16         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
17                 s.getOutputStream()));
18         
19         //读取键盘录入的数据,并传输到服务器端
20         String line = null;
21         while((line = is.readLine()) != null){
22             // 设个键盘关闭条件
23             if (line.equals("esc")) {
24                 break;// 这里退出了,就等于br退出了,就等于s退出了。所以后面br不用释放资源
25             }
26             
27             bw.write(line);
28             bw.newLine();
29             bw.flush();
30         }
31         //释放资源
32         s.close();
33         
34         
35     }
36 
37 }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注