奋斗在JAVA路上的随手记——网络编程基础知识、TCP通信流程
2018-12-20 16:31
351 查看
第一章 网络编程基础知识
1、两种软件架构
A、BS架构 a.含义 B:Browser浏览器 S:Server服务器 b.举例 某猫、某东、度娘 c.特点 直接使用浏览器,访问网站,就可以进去 B、CS架构 a.含义 C:Client客户端 S:Server服务器 b.举例 企鹅、企鹅音乐、撸啊撸 c.特点 需要下载客户端,安装客户端,才能使用
2、网络编程三要素
A、IP地址 (ipv4和ipv6) a.查看IP地址的指令 ipconfig b.本地默认IP地址 127.0.0.1 B、端口号 a. 端口号 范围是 0~65535 b. 其中 0~1024 属于系统端口,不要使用 C、通信协议 a.TCP协议 传输数据大 安全性高 速度慢 b.UDP协议 传输数据小 64KB 安全性低 速度快
第二章 TCP通信流程
1、客户端(发送数据)操作步骤
A. Socket clickSocket = new Socket("IP地址",端口号); //创建Socket的对象 B. OutputStream os = clickSocket.getOutputStream(); //获取IO流对象(输出) C. os.write("需要写入的数据"); //写数据,可以进行流的增强 D. os.close(); //释放资源
2、服务端(接收数据)操作步骤
A. ServerSocket serverSocket = new ServerSocket(端口号); //创建ServerScoket对象 B. Socket clientSocket = serverSocket.accept(); //连接客户端Socket对象 C. InputStream is = clickSocket.getInputStream(); //获取IO流对象(输入) D. int ch = is.read(); //读数据,可以进行流的增强 E. is.close(); //释放资源
3、服务端(回复数据)操作步骤
A. OutputStream os = clientSocket.getOutputStream(); //获取IO流对象(输出) B. os.write("需要写回的数据"); //写数据,可以进行增强流 C. os.close(); //释放资源 D. clickSocket.close(); //关闭客户端socket
4、客户端(接收数据)操作步骤
A. InputStream is = clickSocket.getInputStream(); //获取IO流对象(输入) B. int ch = is.read(); //读数据 可以进行流的增强 C. is.close(); //释放资源 D. clickSocket.close(); //关闭客户端socket
5、注意事项
A.采用 BufferedReader 和 BufferedWriter 进行读写操作. BufferedWriter 每次写完一个数据,需要换行和刷新.才能被 BufferedReader 读取得到 原因是: BufferedReader 采用 readLine()读取数据的结束条件是 "遇到换行符结束" B.客户端的 Socket 和 服务端获取客户端Socket要匹配上 客户端的 Socket ----- 匹配到 ---> 服务端的 serverSocket.accept();
第三章 一些优化问题
1、相关代码的优化处理
A、服务端文件以毫秒值命名的处理问题 long time = System.currentTimeMillis(); B、客户端通知服务器数据书写完毕 clickSocket.shutdownOutput();
2、多线程版本服务端优化
//获取服务端的ServerSocket的对象 ServerSocket serverSocket = new ServerSocket(端口号); //死循环.不断的开启获取单独客户端的连接 while(true){ //获取客户端的Socket Socket clientSocket = serverSocket.accept(); //开启线程,可以采用lambda表达式 new Thread(()->{ try{ //编写以前的代码.获取IO流对象...释放资源 }catch(IOException e){ e.printStackTrace(); } }).start(); }
相关文章推荐
- Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例
- Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
- Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)
- Java基础知识网络编程(TCP练习)
- Java基础知识强化之网络编程笔记02:Socket通信原理图解
- JAVA基础知识之网络编程——-网络通信模型(IO模型)
- Java基础知识强化之网络编程笔记12:TCP之TCP协议上传文本文件并给出反馈
- Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
- Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据
- Java基础知识强化之网络编程笔记13:TCP之TCP协议上传图片并给出反馈
- Java基础知识强化之网络编程笔记15:Android网络通信之 Android异步任务处理(AsyncTask使用)
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)
- Java基础知识强化之网络编程笔记18:Android网络通信之 使用HttpClient的Post / Get 方式读取网络数据(基于HTTP通信技术)
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
- Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享
- Java基础知识强化之网络编程笔记19:Android网络通信之 HttpClient和传统Post、Get方式的区别
- Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)