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