当前位置: 首页 > news >正文

【Java基础 下】 030 -- 网络编程

目录

一、什么是网络编程

1、常见的软件架构(CS & BS)

①、BS架构的优缺点

②、CS架构的优缺点

2、小结

二、网络编程三要素

1、IP

①、IPv4

②、IPv6

③、小结

④、IPv4的一些细节

⑤、InetAddress的使用

2、端口号

3、协议

①、TCP & UDP

三、UDP通信程序

①、发送数据

②、接收数据

③、UDP练习(聊天室)

④、UDP的三种通信方式(单播、组播、广播)

四、TCP通信程序

1、书写代码步骤

2、代码细节

①、三次握手

②、四次挥手

③、小结

五、综合练习

1、TCP通信练习1 —— 多发多收

2、TCP通信练习2 —— 接收和反馈

①、示例代码:

②、小细节:(socket read结束标记)

3、TCP通信练习3 —— 上传文件

4、TCP通信练习4 —— 上传文件(文件名重复问题)

①、UUID类

②、示例代码

5、TCP通信练习5 —— 上传文件(多线程版)

6、TCP通信练习6 —— 上传文件(线程池优化)

7、TCP通信练习7 ——  BS(接收浏览器的消息并打印)

8、TCP通信练习7 —— 网络编程(课后大作业)


一、什么是网络编程

1、常见的软件架构(CS & BS)

①、BS架构的优缺点

优点:

缺点:

②、CS架构的优缺点

优点:

缺点:

2、小结

二、网络编程三要素

1、IP

①、IPv4

②、IPv6

③、小结

④、IPv4的一些细节

局域网IP举例:(利用局域网节省IP)

特殊的IP地址(回环地址):

自己给自己发数据的话,可以直接使用127.0.0.1,这是因为不同路由器分配的IP不固定,造成想要自己给自己发数据,IP也要跟着变

常用的CMD命令:

⑤、InetAddress的使用

InetAddress类表示互联网协议(IP)地址

示例代码:

2、端口号

3、协议

①、TCP & UDP

UDP适用于:在线视频、网络会议

TCP适用于:发送邮件、文字聊天

三、UDP通信程序

①、发送数据

示例代码:

②、接收数据

示例代码:

接收和发送端口要一致

这里发送的端口是随机的,你只需要保证要发送到的端口和接收端口一致即可

小细节:receive方法是阻塞的

③、UDP练习(聊天室)

示例代码:(发送端)

示例代码:(接收端)

允许多个发送端:(允许一个类可以运行多次)

④、UDP的三种通信方式(单播、组播、广播)

单播:1对1

组播:1对1组

广播:1对所有

代码实现:

组播发送端代码:

组播接收端代码:

广播代码:

四、TCP通信程序

1、书写代码步骤

示例代码:(发送数据 -- 客户端)

(接收数据 -- 服务端):

但上述代码会出现中文乱码的问题,那么如何解决这个问题呢?

【Solution】:接收端要结合编码表进行接收,使用转换流InputStreamReader,将字节流转换成字符流。同时,为了进一步提高读写的效率,我们可以在外面再包上一层缓冲流BufferedReader.

2、代码细节

①、三次握手

三次握手的过程是为了确保连接建立

②、四次挥手

四次挥手是为了确保连接断开,且数据处理完毕

③、小结

TCP挥手的时候,客户端会和服务端互发消息,其发送的数据包就是ICMP

五、综合练习

1、TCP通信练习1 —— 多发多收

示例代码:

Client

Server

2、TCP通信练习2 —— 接收和反馈

①、示例代码:

②、小细节:(socket read结束标记)

那么解决办法也很简单,写一个结束标记即可

3、TCP通信练习3 —— 上传文件

示例代码:

Client

Server

4、TCP通信练习4 —— 上传文件(文件名重复问题)

①、UUID类

示例代码:

但是我不想要横杠,应该如何处理:replace()替换

②、示例代码

与练习3相比,代码更改如下:

客户端代码没有任何修改

5、TCP通信练习5 —— 上传文件(多线程版)

示例代码:

Server

MyRunnable.java

客户端代码没有任何修改

6、TCP通信练习6 —— 上传文件(线程池优化)

示例代码:

Server

客户端代码没有任何修改

7、TCP通信练习7 ——  BS(接收浏览器的消息并打印)

示例代码:

Server

在浏览器中输入IP和端口号,BS架构中,浏览器其实就是客户端

8、TCP通信练习7 —— 网络编程(课后大作业)

服务器端在这里的作用就是【消息转发

完整需求可参见【网络编程课后大作业完整需求.md】

待补充~

实现效果:

http://www.lryc.cn/news/36178.html

相关文章:

  • 2021牛客OI赛前集训营-提高组(第三场) T3打拳
  • C++面向对象编程之四:成员变量和成员函数分开存储、this指针、const修饰成员和对象
  • 卷积神经网络(CNN)基础知识
  • opencv+python 常见图像预处理
  • 如何实现一个单例模式
  • 传输线的物理基础(四):传输线的驱动和返回路径
  • Java多态性
  • 算法拾遗二十七之窗口最大值或最小值的更新结构
  • 【带你搞定第二、三、四层交换机】
  • C++基础了解-22-C++ 重载运算符和重载函数
  • BatchNormalization
  • vue 中安装插件实现 rem 适配
  • Hadoop学习
  • Golang反射源码分析
  • Qt之悬浮球菜单
  • 易优cms attribute 栏目属性列表
  • 表格中的table-layout属性讲解
  • 【MFA】windows环境下,使用Montreal-Forced-Aligner训练并对齐音频
  • C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等
  • 电脑图片损坏是怎么回事
  • 【论文研读】无人机飞行模拟仿真平台设计
  • 【算法题】2379. 得到 K 个黑块的最少涂色次数
  • DJ1-3 计算机网络和因特网
  • Git学习笔记(六)-标签管理
  • Semaphore 源码解读
  • RZ/G2L工业核心板U盘读写速率测试
  • 《SQL与数据库基础》18. MySQL管理
  • 达梦关系型数据库
  • Postgresql | 执行计划
  • Vue3之父子组件通过事件通信