java 26 - 7 网络编程之 TCP协议代码优化
上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流。
优化:
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 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持