套接字(socket)是一种在计算机网络中进行进程间通信的方法,它允许不同主机上的程序通过网络相互通信。套接字是网络编程的基础,几乎所有的网络应用程序都使用某种形式的套接字来实现网络功能。套接字可以用于各种类型的网络协议,如TCP、UDP等。
在 Python 中使用套接字(socket)进行网络通讯是一种常见的做法。接下来我给大家提供一个简单的 TCP 服务器和客户端的例子,它们可以互相发送和接收消息。
服务器端 (Server)
- 导入 socket 库。
- 创建一个 socket 对象。
- 绑定 IP 地址和端口号到这个 socket。
- 监听连接请求。
- 接受客户端的连接。
- 与客户端通信:发送/接收数据。
- 关闭连接。
import socket
def start_server(host='127.0.0.1', port=65432):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# 绑定地址
s.bind((host, port))
# 开始监听
s.listen()
print(f"Server listening on {host}:{port}")
while True:
# 等待客户端连接
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
print(f"Received: {data.decode()}")
# 发送回客户端
conn.sendall(data)
if __name__ == '__main__':
start_server()
客户端 (Client)
- 导入 socket 库。
- 创建一个 socket 对象。
- 连接到服务器。
- 发送/接收数据。
- 关闭连接。
import socket
def start_client(host='127.0.0.1', port=65432):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# 连接到服务器
s.connect((host, port))
message = "Hello, Server!"
# 发送数据
s.sendall(message.encode())
# 接收响应
data = s.recv(1024)
print(f"Received from server: {data.decode()}")
if __name__ == '__main__':
start_client()
使用说明
- 确保先运行服务器脚本,然后运行客户端脚本。
- 默认情况下,这里的例子使用本地回环地址 127.0.0.1 和端口 65432。你可以根据需要更改这些值。
- 服务器会持续运行并等待新的连接,直到手动停止。
- 每次客户端发送消息给服务器后,服务器会把相同的消息返回给客户端。
上面的代码展示了如何使用 Python 的标准库来实现基本的 TCP 客户端-服务器模型。对于更复杂的应用场景,可能还需要考虑错误处理、多线程或异步 I/O 等高级功能。
欢迎点赞?关注!