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

优化:

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

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

服务器端代码:

  

 /*
TCP协议:
服务器端
*/
public class ServerDemo {
public static void main(String[] args) throws IOException { // 创建socket接收端对象监听
ServerSocket ss = new ServerSocket(10010); // 创建socket对象
Socket s = ss.accept(); // 创建输入流,由于客户端发送过来的是字符流,而通道的流是字节流
// 所以需要对通道里的字节流包装下 (socket的字节流 → 转换流 → 高效字符流)
BufferedReader br = new BufferedReader(new InputStreamReader(
s.getInputStream())); // 由于是高效字符流了,所以一次性读取一行
String line = null;
while ((line = br.readLine()) != null) { System.out.println(line);
} // 释放资源
s.close();
}
}

客户端:

 /*
TCP传输:
发送键盘录入的数据到服务器端
*/
public class ClientDemo {
public static void main(String[] args) throws IOException { // 创建socket对象
Socket s = new Socket("172.19.12.233", 10010); // 创建键盘输入流 InputStreamReader 是字节流通向字符流的桥梁
BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); // 由于TCP传输中,信息传输是字节流,所以要对它进行包装成字符流
// 把socket的字节输出流通过转换流包装成高效字符输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream())); //读取键盘录入的数据,并传输到服务器端
String line = null;
while((line = is.readLine()) != null){
// 设个键盘关闭条件
if (line.equals("esc")) {
break;// 这里退出了,就等于br退出了,就等于s退出了。所以后面br不用释放资源
} bw.write(line);
bw.newLine();
bw.flush();
}
//释放资源
s.close(); } }

java 26 - 7 网络编程之 TCP协议代码优化的更多相关文章

  1. java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码

    TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送 ...

  2. java 26 - 9 网络编程之 TCP协议多用户上传文件

    TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...

  3. java 26 - 8 网络编程之 TCP协议的练习

    TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: public class ClientDemo { public static void main(String[] args) t ...

  4. java 26 - 8 网络编程之 TCP协议上传图片

    上次的是上传TXT文件,这次上传的是图片.同样,上传成功需要反馈给客户端. 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了. 而图片用记事本打开,我们看 ...

  5. 网络编程之TCP协议怎么使用?

    TCP 通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器会写的数据 表示客户端的类: java.net.Socket;此类实现客户端套接字.套接字是两台机器间通信的端点 套接字:包含了 ...

  6. 网络编程之tcp协议以及粘包问题

    网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...

  7. 网络编程之TCP协议与UDP协议

    了解网络就要了解一些基本的协议今天主要跟大家分享一些关于TCP 协议UDP协议的相关知识 首先介绍一下TCP协议 TCP(Transmission Cintrol Protocol)可靠的.面向连接的 ...

  8. python六十九课——网络编程之TCP协议

    1.1 概述: TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自的Socket对象.Socket对象中包含了IO流,供数据传输. 即:TCP协议在客户端与服务器端通过Socket组成了I ...

  9. day28 8_7 网络编程之tcp协议

    一.socket模块 socket模块就是用来网络搭建的模块,socket也叫套接字. 创建网络连接,需要使用两个模块进行模拟,一个作为server服务器端,一个作为client客户端. 在服务器端, ...

随机推荐

  1. Hadoop出现 native snappy library not available: SnappyCompressor has not been loaded的解决办法

    我目前测试环境是Hadoop 2.7.1, 搭建群集之后经常出现错误“native snappy library not available: SnappyCompressor has not bee ...

  2. 浅析Dagger2的使用

    什么是Dagger2 Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护. 我们知道Dagger是一个依 ...

  3. iOS字体换算 PS的字体大小 <=>iOS上字体大小

  4. 1.7 基础知识——GP2.6 配置管理(CM)

    摘要: 某某工作产品要进行配置管理,并不意味非要进行很重型的配置管理,根据实际需要采取合适的方式就可以了. 正文: GP2.6 Place designed work products of XXX ...

  5. android Gui系统之WMS(2)----窗口的添加

    Android系统很多,但是最常用的就两类,一类是有系统进场管理的,系统窗口.还有一类就是由应用程序产生的,应用窗口. 1.系统窗口的添加流程 1.1 addStatusBarWindow Phone ...

  6. 每日Scrum(4)

    今天是冲刺第4天,小组也没有做什么,大家都忙着找大二的学弟学妹来点评来支持我们的软件. 遇到的问题主要是如何劝说学弟学妹选择我们的软件然后继续往下做.

  7. MySQL online ddl原理

    背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的 ...

  8. R语言中的循环函数(Grouping Function)

    R语言中有几个常用的函数,可以按组对数据进行处理,apply, lapply, sapply, tapply, mapply,等.这几个函数功能有些类似,下面介绍下这几个函数的用法. Apply 这是 ...

  9. python基础(五)缩进和选择

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例. ...

  10. 烂泥:使KVM显示VM的IP地址及主机名

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. KVM虚拟化学习已经有一段时间了,现在虚拟化软件比较多,对比了下目前使用比较多的VMware Vsphere.发现在不进入VM系统的情况下,Vspher ...