终日思不如须臾所学也 
1. 计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,目的是为了实现资源共享和信息传递的计算机系统。
1.1 需要准备
通信双方地址和端口号:IP地址:端口号
规则:Java Web :网页编程 (B/S)网络编程:TCP/IP (C/S)
协议:TCP/IP OSI七层模型


1.2 IP地址(InetAddress)
- 唯一定位一台网络上计算机
 - 127.0.0.1:本机 localhost
 - 分类:IPV4 IPV6,公网,私网(局域网)
 - 域名:记忆IP问题
 
1.3 端口
不同的进程有不同的端口号,用来区分软件;
被规定0-65535
TCP,UDP:65535*2 tcp:80 udp:80,但单个协议端口不能重复
分类:
公有端口:0-1023
- HTTP : 80
 - HTTPS:443
 - FTP:21
 - Telnet:23
 
程序注册端口:1024-49151,分配用户或者程序
- Tomcat:8080
 - MySQL:3306
 - Redis:6379
 - Oracle:1521
 - 动态,私有端口:49152-65535
 
1  | #查看所有端口  | 
- 使用Ctrl+Shfit+ESC打开任务管理器
 
1.4 通信协议
- 网络通信协议:速率,传输码率,代码结构,传输控制…
 - TCP:用户传输协议:打电话,客户端、服务端,传输完成,释放连接,效率低;
- 三次挥手,四次握手
 
 - UDP:用户数据报协议:发短信,不连接,不稳定,导弹,DDOS(饱和攻击)
 
2. TCP
| 方法 | 类型 | 说明 | 
|---|---|---|
| public ServerSocket(int var1) throws IOException | 构造 | 开辟一个指定的端口监听,一般使用5000以上 | 
| public Socket accept() throws IOException | 普通 | 服务器端接收客户端请求,通过Socket返回 | 
| public void close() throws IOException | 普通 | 关闭服务器端 | 
| 方法 | 类型 | 说明 | 
|---|---|---|
| public Socket(String var1, int var2) throws UnknownHostException, IOException | 构造 | 指定要连接的主机和端口 | 
| public OutputStream getOutputStream() throws IOException | 普通 | 取得指定客户端的输出对象,使用的时候肯定使用PrintStream装饰操作 | 
| public InputStream getInputStream() throws IOException | 普通 | 从指定客户端读取对象,使用Scanner操作 | 
2.1 客户端
自定义叫C(customize),浏览器叫B
连接服务器
发送消息
Echo程序模型栗子:
1  | package com.xxy.test;  | 
2.2 服务端
自定义叫S,Tomocat叫S
建立服务端口(进程)
等待用户的连接(accept)
接受用户的信息
栗子
1  | package com.xxy.test;  | 
3. 文件上传
- 栗子:
 - 客户端:
 
1  | package com.xxy.test1;  | 
服务端:
1  | package com.xxy.test1;  | 
4. Tomcat
服务端
- 自定义【S】
 - Tomcat【S】
 
客户端
- 自定义【C】
 - 浏览器【B】
 
5.UDP
| 方法 | 类型 | 说明 | 
|---|---|---|
| public DatagramPacket(byte[] var1, int var2) | 构造 | 实例化DatagramPacket对象时指定接收数据长度 | 
| public DatagramPacket(byte[] var1, int var2, int var3, InetAddress var4, int var5) | 构造 | 实例化DatagramPacket对象时指定接收数据长度、数据的长度、目标地址及端口 | 
| public synchronized byte[] getData() | 普通 | 返回接受的数据 | 
| public synchronized int getLength() | 普通 | 返回要发送或接收数据的长度 | 
| 方法 | 类型 | 说明 | 
|---|---|---|
| public DatagramSocket(int var1) throws SocketException | 构造 | 实例化DatagramSocket对象,并指定监听的端口 | 
| ublic void send(DatagramPacket var1) throws IOException | 普通 | 发送数据报 | 
| public synchronized void receive(DatagramPacket var1) throws IOException | 普通 | 接收数据报 | 
- 栗子
 - 客户端
 
1  | package com.xxy.test3;  | 
- 服务端
 
1  | package com.xxy.test3;  | 
6. 循环发送消息
- 栗子
 - 发送端
 
1  | package com.xxy.chat;  | 
- 接收端
 
1  | package com.xxy.chat;  | 
7. 在线聊天
栗子
发送端
1  | package com.xxy.chat;  | 
- 接收端
 
1  | package com.xxy.chat;  | 
- 老师线程1
 
1  | package com.xxy.chat;  | 
- 学生线程
 
1  | package com.xxy.chat;  | 
8. URL(统一资源定位符)
协议:(DNS域名解析)ip地址:端口/项目名/资源
- 下载
 
1  | package com.xxy.test4;  | 
9. 总结
网络编程和IO流一般都在一起,重点是熟悉,如果还有其他的内容欢迎大家补充。