
目录
一、什么是网络编程
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】
待补充~
实现效果:






















