Java——网络编程
目录
一、什么是网络编程
1、常见的软件架构(CS & BS)
1.1、BS架构的优缺点编辑
1.2、CS架构的优缺点编辑
2、小结编辑
二、网络编程三要素编辑
1、IP编辑
1.1、IPv4编辑
1.2、IPv6编辑
1.3、小结编辑
1.4、IPv4的一些细节编辑
1.5、InetAddress的使用
2、端口号编辑
3、协议编辑
3.1、TCP & UDP编辑
三、UDP通信程序
1、发送数据编辑
2、接收数据编辑
3、UDP练习(聊天室)
4、UDP的三种通信方式(单播、组播、广播)
四、TCP通信程序编辑
1、书写代码步骤编辑
2、代码细节
2.1、三次握手
2.2、四次挥手
2.3、小结
五、综合练习
1、TCP通信练习1 —— 多发多收编辑
2、TCP通信练习2 —— 接收和反馈编辑
2.1、示例代码:
2.2、小细节:(socket read结束标记)
3、TCP通信练习3 —— 上传文件编辑
4、TCP通信练习4 —— 上传文件(文件名重复问题)编辑
4.1、UUID类编辑
4.2、示例代码
5、TCP通信练习5 —— 上传文件(多线程版)编辑
6、TCP通信练习6 —— 上传文件(线程池优化)编辑
7、TCP通信练习7 —— BS(接收浏览器的消息并打印)编辑
8、TCP通信练习7 —— 网络编程(课后大作业)
一、什么是网络编程

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


1.1、BS架构的优缺点
1.2、CS架构的优缺点
2、小结
二、网络编程三要素
1、IP
1.1、IPv4
1.2、IPv6
1.3、小结
1.4、IPv4的一些细节

局域网IP举例:(利用局域网节省IP) 
特殊的IP地址(回环地址): 
自己给自己发数据的话,可以直接使用127.0.0.1,这是因为不同路由器分配的IP不固定,造成想要自己给自己发数据,IP也要跟着变
常用的CMD命令: 
1.5、InetAddress的使用

InetAddress类表示互联网协议(IP)地址
示例代码:

2、端口号

3、协议
3.1、TCP & UDP
UDP适用于:在线视频、网络会议
TCP适用于:发送邮件、文字聊天
三、UDP通信程序
1、发送数据
示例代码
2、接收数据
示例代码
接收和发送端口要一致

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

小细节:receive方法是阻塞的

3、UDP练习(聊天室)

示例代码:(发送端) 
接收端

允许多个发送端:(允许一个类可以运行多次)
4、UDP的三种通信方式(单播、组播、广播)

组播发送端代码:

组播接收端代码:

广播代码:

四、TCP通信程序
1、书写代码步骤
示例代码:(发送数据 -- 客户端)

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

但上述代码会出现中文乱码的问题,那么如何解决这个问题呢?
【Solution】:接收端要结合编码表进行接收,使用转换流InputStreamReader,将字节流转换成字符流。同时,为了进一步提高读写的效率,我们可以在外面再包上一层缓冲流BufferedReader.

2、代码细节

2.1、三次握手

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

2.3、小结
TCP挥手的时候,客户端会和服务端互发消息,其发送的数据包就是ICMP
五、综合练习
1、TCP通信练习1 —— 多发多收
示例代码:
Client
Sever
2、TCP通信练习2 —— 接收和反馈
2.1、示例代码:

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

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

3、TCP通信练习3 —— 上传文件
示例代码:
Client
Server 
4、TCP通信练习4 —— 上传文件(文件名重复问题)
4.1、UUID类
但不想要横杠,应该如何处理:replace()替换

4.2、示例代码
与练习3相比,代码更改如下
客户端代码没有任何修改
5、TCP通信练习5 —— 上传文件(多线程版)
示例代码:
Server

MyRunnable.java


客户端代码没有任何修改
6、TCP通信练习6 —— 上传文件(线程池优化)
7、TCP通信练习7 —— BS(接收浏览器的消息并打印)
Server
在浏览器中输入IP和端口号,BS架构中,浏览器其实就是客户端
8、TCP通信练习7 —— 网络编程(课后大作业)

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

完整需求可参见【网络编程课后大作业完整需求.md】
待补充~
实现效果:
