网络编程
1.1 概述
计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
网络编程目的
传播信息(数据交换、通信)
1.2 网络通信的要素
-
IP 和 端口号
-
网络通信协议
1.3 IP
-
唯一定位一台网络上计算机
-
127.0.0.1:本机localhost
-
ip地址的分类(IPV4 / IPV6)
-
域名:记忆IP问题
1.4 端口
端口表示计算机上的一个程序的进程
-
不同进程有不同端口号,用于区分软件
-
被规定 0 - 65535
-
(TCP) (UDP) 单个协议下,端口号不能冲突
-
端口分类
-
公用端口 0 - 1023
-
HTTP: 80
-
HTTPS: 443
-
FTP: 21
-
-
程序注册端口 1024 - 49151,分配给用户或者程序
-
Tomcat: 8080
-
MySQL: 3306
-
Oracle: 1521
-
-
动态、私有端口 49152 - 65535
netstat -ano #查看所有端口
netstat -ano|findstr "端口号" #查看指定端口
tasklist|findstr "PID" #查看指定端口进程
Ctrl + Shift + Esc 快速打开任务管理器
-
1.5 通信协议
TCP/IP协议组:实际上一组协议
TCP:打电话
-
连接,稳定
-
三次握手 四次挥手
A:你瞅啥
B:瞅你咋地
A:干一场
A:我要走了
B:你真的要走了吗
B:你真的真的要走了吗
A:我真的要走了
UDP:发短信
-
不连接,不稳定
1.6 TCP
客户端
-
连接服务器Socket
-
发送消息
//1.连接服务器
//获取服务端IP和端口号
InetAddress serverIP = InetAddress.getByName("localhost");
int port = 9999;
//创建一个Socket连接
socket = new Socket(serverIP, port);
//2.发送消息
os = socket.getOutputStream();
os.write("客服端向服务端发送消息".getBytes());
服务端
-
建立服务的端口
-
等待用户的连接
-
接受用户的消息
//1.创建服务的端口
serverSocket = new ServerSocket(9999);
while (true) {
//2.等待用户的连接
socket = serverSocket.accept();
//3.接受用户的消息
is = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
baos = new ByteArrayOutputStream();
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
System.out.println(baos);
}
Tomcat
服务端
-
自定义 S
-
Tomcat服务器 S :Java后台开发
客户端
-
自定义 C
-
浏览器 B
1.7 UDP
发送端
public class SendDemo01 {
public static void main(String[] args) throws IOException {
//1.创建数据包Socket
DatagramSocket socket = new DatagramSocket(9998);
//2.创建数据报包
String massage = "数据报包";
DatagramPacket packet = new DatagramPacket(massage.getBytes(), 0,
massage.getBytes().length, InetAddress.getByName("127.0.0.1"), 9999);
//3.发送数据报包
socket.send(packet);
//4.关闭资源
socket.close();
}
}
接收端
public class ReceiveDemo01 {
public static void main(String[] args) throws IOException {
//1.创建服务的端口
DatagramSocket socket = new DatagramSocket(9999);
//2.接收数据报包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet);
//3.输出数据报包
System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(), 0, packet.getLength()));
//4.关闭资源
socket.close();
}
}
1.8 URL
统一资源定位符:定位资源(本地,互联网)
DNS域名解析
协议://ip地址:端口/项目名/资源