owo
CS/BS
- 常见软件架构
C/S
- Client/Server
B/S
- Browser/Server
网络编程三要素
IP
端口号
协议
java.net包
表示IP地址
InetAddress类
方法
static InetAddress getByName(String host)
:确定主机的IP。主机名可以是机器名,也可以是IPString getHostName()
:获取此IP的主机名String getHostAddress()
:返回文本显示中的IP地址字符串
协议
UDP
- 面向无连接
- 用户数据包协议(User Datagram Protocol)
- 速度快、一次最多发64K,易丢失
发送数据
- 创建发送端的DatagramSocket
- 数据打包
- 发送数据
- 释放资源
//创建对象时底层绑定端口,作为发出的端口
//空参:所有可用端口中随机一个使用
//有参:指定端口
DatagramSocket ds = new DatagramSocket();
//打包数据
String str = "Hello";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//发到 port 这个端口
//发送数据
.send(dp);
ds
//释放资源
.close(); ds
接收数据
- 创建接收端的DatagramSocket对象
- 接收打包好的数据
- 解析数据包
- 释放资源
//接收的时候一定要绑定端口
DatagramSocket ds = new DatagramSocket(10086);
//接收数据包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//这个方法是阻塞的
//执行到这一步会死等
.receive(dp);
ds
//解析数据包
byte[] data = dp.getData();
int len = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println(new String(data, 0, len));
System.out.println(address + " " + port);
//释放资源
.close(); ds
三种通信方式
- 单播
- 组播
- 广播
TCP
- 面向连接
- 传输控制协议(Transmission Control Protocol)
- 速度慢、没大小限制,数据安全
- 通过Socket产生IO流进行网络通信
客户端
- 创建客户端的Socket对象(
Socket
),与指定服务端连接 - 获取输出流,写数据
- 释放资源
//在创建对象的同时会连接服务器
//连接不上会报错
Socket socket = new Socket("127.0.0.1", 10000);
//可以从连接通道中获取输出流
OutputStream os = socket.getOutputStream();
//写数据
.write("Hello".getBytes());
os
//释放资源
.close();
os.close(); socket
服务器
- 创建服务器端的Socket对象(
ServerSocket
) - 监听客户端连接,返回一个Socket对象
- 获取输入流,读数据,并把数据显示在控制台
- 释放资源
ServerSocket ss = new ServerSocket(10000);
//如果没有连接就会死等
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
int b;
while((b = is.read()) != -1) {
System.out.println((cahr)b);
}
.close();//断开连接
socket.close();//关闭服务器 ss
注意:这里是字节流,会出现中文乱码。类比之前的字符流可以解决
三次握手
- 客户端向服务器发出连接请求,等待服务器确认
- 服务器向客户端返回一个响应,告诉客户端收到了请求
- 客户端向服务端再次发出确认,连接建立
四次挥手
- 客户端向服务端发出取消连接请求
- 服务端向客户端返回一个请求,表示收到客户端取消请求
- 服务端将最后的数据处理完毕之后,再次向客户端发出确认取消信息
- 客户端再次发送确认消息,连接断开