共计 1171 个字符,预计需要花费 3 分钟才能阅读完成。
Socket
简称套接字,是进程之间通信的一个工具,进程之间想要进行网络通信需要 Socket。
Socket 负责进程之间的网络数据传输,好比数据的搬运工。
服务端开发
import socket
import threading
def handle_client(conn, address):
""" 用于处理客户端连接请求 """
print(f" 客户端地址 {address}")
while True:
# 接收客户端信息,recv 接收参数是缓冲区大小,返回值是 bytes 对象
recv_data = conn.recv(1024).decode("UTF-8")
print(f" 客户端发来的消息:{recv_data}")
msg = input(" 请输入回复的消息:")
if msg == "exit":
break
conn.send(msg.encode("UTF-8"))
conn.close()
if __name__ == "__main__":
socket_server = socket.socket()
socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置端口复用
socket_server.bind(("localhost", 8888)) # 绑定 IP 和端口
socket_server.listen(128) # 监听端口,最大连接数量 128
print(" 等待客户端连接...")
while True:
conn, address = socket_server.accept() # 等待客户端连接,accept 是个阻塞方法
t = threading.Thread(target=handle_client, args=(conn, address))
t.start()
socket_server.close()
客户端开发
import socket
# 创建 socket 对象
socket_client = socket.socket()
# 连接到服务端
socket_client.connect(("localhost", 8888))
while True:
# 发送消息
msg = input(" 请输入要发给服务端的消息:")
if msg == "exit":
break
socket_client.send(msg.encode("UTF-8"))
# 接收服务端消息
recv_data = socket_client.recv(1024).decode("UTF-8")
print(f" 服务端回复的消息:{recv_data}")
# 关闭连接
socket_client.close()
不管是 recv 还是 send 都不是直接接收到对方的数据和发送数据到对方,发送数据会写入到发送缓冲区,接收数据是从接收缓冲区来读取,发送数据和接收数据最终是由操作系统控制网卡来完成的。
正文完