# 网络编程概述
网络编程:网络互联的计算机实现数据交换
# 网络编程三要素
# IP
IP:网络中设备的唯一标识
cmd -> ipconfig:查看本机 ip
cmd -> ping ip 地址:检查网络是否连通
127.0.0.1:回送地址,可以代表本机
# 端口
- 端口:设备应用程序的唯一标识
- 理论取值:0 ~ 65535
- 建议取值:1024 以后,避开知名端口号
# 协议
协议:计算机网络通信和连接的规则
- UDP:用户数据报协议
- 特点:不需要建立连接,不区分客户端服务器
- TCP:传输控制协议
- 特点:需要建立连接
- 三次握手
- 客户端 -> 服务器:连接请求
- 服务器 -> 客户端:收到请求
- 客户端 -> 服务器:确认连接
# UDP
# UDP 发送数据
# 步骤
// 1. 创建发送端的 Socket 对象 (DatagramSocket) | |
DatagramSocket ds = new DatagramSocket(); | |
// 2. 创建数据,并且将数据打包 | |
DatagramPacket dp = new DatagramPacket("baozi".getBytes(),"baozi".getBytes().length(),InetAddress.getByName("192.168.1.148"),10010); | |
// 3. 调用 DatagramSocket 对象的方法发送数据 | |
ds.send(dp); | |
// 4. 关闭发送端 | |
ds.close(); |
# DatagramSocket 传输对象
- 无参构造:
DatagramSocket()
- 发送数据包:
public void send(DatagramPacket p)
- 释放资源:
public void close()
# DatagramPacket 数据包
数据包的构造方法: public DatagramPacket(byte buf[], int length, InetAddress address, int port)
- byte buf []:字节数组
- length:字节长度 (
bus.length
) - InetAddress address:
InetAddress.getByName(String ip)
- port:端口号
# UDP 接收数据
# 步骤
// 1. 创建接收端的 Socket 对象 (DatagramSocket) | |
DatagramSocket ds = new DatagramSocket(10010); | |
// 2. 创建一个数据包,用来接收数据 | |
DatagramPacket dp = new DatagramPacket(new byte[1024],1024); | |
// 3. 调用 DatagramSocket 对象的方法接收数据 | |
ds.receive(dp); | |
// 4. 解析数据包,并把数据在控制台显示 | |
System.out.println(new String(dp.getData(),0,dp.getLength())); | |
// 5. 释放资源 | |
ds.close(); |
# DatagramSocket 传输对象
- 带参构造:
DatagramSocket(int port)
- 接收数据包:
public synchronized void receive(DatagramPacket p)
# DatagramPacket 数据包
- 空数据包构造方法:
public DatagramPacket(byte buf[], int lengtn)
- 获取数据:
public synchronized byte[] getData()
- 获取数据长度:
public synchronized int getLength()
# TCP
# TCP 发送数据
# 步骤
Socket s = new Socket("192.168.1.148",10010); | |
OutputStream os = s.getOutputStream(); | |
os.write("hello".getBytes()); | |
os.close(); |
# Socket 流套接字
- 构造方法:
public Socket(String host, int port)
- 获取输出流:
public OutputStream getOutputStream()
# TCP 接收数据
# 步骤
ServerSocket ss = new ServerSocket(10010); | |
Socket s = ss.accept(); | |
InputStream is = s.getInputStream(); | |
byte[] bys = new byte[1024]; | |
int len = is.read(bys); | |
System.out.println(new String(bys,0,len)); | |
is.close(); | |
s.close(); |
# ServerSocket 服务端套接字
- 构造方法:
public ServerSocket(int port)
- 监听,返回 Socket 对象:
public Socket accept()
# Socket 流套接字
获取输入流: public InputStream getInputStream()