一、为什么要区分服务器端和客户端?
- 服务器端:资源和服务的提供者,通常24小时运行,等待客户端请求。
- 客户端:资源和服务的使用者,主动发起请求,等待服务器响应。
- 典型场景:网页浏览、文件下载、聊天、游戏等,客户端(如浏览器、APP)都要先连接服务器。
二、基于TCP协议的socket编程架构
1. TCP协议特点
- 面向连接(需要三次握手建立连接)
- 可靠传输(保证数据完整、顺序)
2. TCP服务器端典型流程
步骤 | 方法 | 作用说明 |
---|
1 | socket | 创建socket对象,指定协议族和类型(如AF_INET, SOCK_STREAM) |
2 | bind | 绑定IP地址和端口号,指定服务监听的地址 |
3 | listen | 开始监听端口,准备接收客户端连接 |
4 | accept | 阻塞等待客户端连接,返回新的连接socket和客户端地址 |
5 | send/recv | 发送和接收数据(可多次循环) |
6 | close | 关闭连接 |
TCP服务器端伪代码示例
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 8000))
server.listen(5)
conn, addr = server.accept()
data = conn.recv(1024)
conn.send(b'Hello, client!')
conn.close()
server.close()
3. TCP客户端典型流程
步骤 | 方法 | 作用说明 |
---|
1 | socket | 创建socket对象 |
2 | connect | 连接服务器的IP和端口 |
3 | send/recv | 发送和接收数据(可多次循环) |
4 | close | 关闭连接 |
TCP客户端伪代码示例
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
client.send(b'Hello, server!')
data = client.recv(1024)
client.close()
三、基于UDP协议的socket编程架构
1. UDP协议特点
- 无连接(不需要建立连接,直接发数据)
- 不保证可靠性(可能丢包、乱序)
2. UDP服务器端典型流程
步骤 | 方法 | 作用说明 |
---|
1 | socket | 创建socket对象,指定协议族和类型(如AF_INET, SOCK_DGRAM) |
2 | bind | 绑定IP地址和端口号,指定服务监听的地址 |
3 | recvfrom | 接收数据,返回数据和客户端地址 |
4 | sendto | 发送数据到指定客户端地址 |
5 | close | 关闭socket |
UDP服务器端伪代码示例
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8000))
data, addr = server.recvfrom(1024)
server.sendto(b'Hello, client!', addr)
server.close()
3. UDP客户端典型流程
步骤 | 方法 | 作用说明 |
---|
1 | socket | 创建socket对象 |
2 | sendto | 发送数据到服务器的IP和端口 |
3 | recvfrom | 接收服务器返回的数据 |
4 | close | 关闭socket |
UDP客户端伪代码示例
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b'Hello, server!', ('127.0.0.1', 8000))
data, addr = client.recvfrom(1024)
client.close()
四、TCP与UDP socket编程的主要区别
步骤/方法 | TCP(面向连接) | UDP(无连接) |
---|
连接建立 | 需要connect/accept | 不需要,直接sendto/recvfrom |
数据收发 | send/recv | sendto/recvfrom |
可靠性 | 有保证 | 无保证 |
适用场景 | 文件传输、聊天、网页等 | 实时通信、直播、游戏等 |
五、总结
- TCP socket编程:需要建立连接,数据可靠,适合需要数据完整性的场合。
- UDP socket编程:无需建立连接,速度快但不保证可靠性,适合实时性要求高的场合。
- 服务器端:负责监听、接收和响应客户端请求。
- 客户端:主动发起请求,等待服务器响应。