Socket通信工具
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
在下图中,它位于应用层与传输层之间,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

关于TCP、IP是什么:https://ivel-li.github.io/2024/11/29/计算机网络结构/
Python 通信代码
Socket通信,需要一个服务器端和客户端。
服务器端示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import socket socket_server = socket.socket() socket_server.bind(("127.0.0.1", 11451))
socket_server.listen(1)
conn, address = socket_server.accept() print(f"接收到了客户端的连接,客户端的信息:{address}}") while True: data: str = conn.recv(1024).decode("UTF-8") print(f"客户端发来消息:{data}") msg = input("已收到信息。") if msg == 'exit': break conn.send(msg.encode("UTF-8"))
conn.close() socket_server.close()
|
上述代码中,bind函数将服务器的ip和端口号与socket对象绑定,在局域网(同一路由器)下可直接使用内网ip(如192开头ip,127.0.0.1的本机环路ip)通信,端口号的选择注意不要与其他进程端口号冲突。
1
| socket_server.bind('ip',端口号)
|
客户端实例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import socket
socket_client = socket.socket()
socket_client.connect(("127.0.0.1", 11451)) while True: send_msg = input("要发送给服务端的消息:") if send_msg == "exit": break socket_client.send(send_msg.encode("UTF-8")) recv_data = socket_client.recv(1024).decode("UTF-8") print(f"服务端回复的消息是:{recv_data}")
socket_client.close()
|
示例代码中使用环路ip 127.0.0.1 进行本机与本机通信,故可在同一台主机下分别运行这两个代码尝试完成通信。
