3、Python创建TCP服务端和客户端
1)TCP协议示意
(Socket英文里是“插座”的意思,翻译到中文为“套接字”)
2)创建TCP服务端
步骤:创->绑->监->接
- 创建socket对象 socket.socket(family=AF_INET, type=SOCK_STREAM, protp=0, fileno=None)
- family:指定网络类型(AF_INET(默认),基于 IPv4 协议的网络;AF_INET6 基于 IPv6 协议的网络;AF_UNIX 基于 UNIX 的网络)
- type:指定 socket 类型(SOCK_STREAM(默认),基于 TCP 协议;SOCK_DFRAM,基于 UDP 协议)
- protp:协议号
- fileno:文件号
- 绑定到指定IP、端口 socket.bind(address)
- address 参数为元组,包含 IP 地址和端口
- 在该 IP、端口监听,用于接收来自客户端的连接 socket.accept()
- 返回客户端的 socket 和客户端的地址
import socket
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
# 绑定到指定的 IP 和端口
s.bind(('192.168.1.17', 3000))
# 监听
s.listen()
while True:
# 接受来自客户端的连接
c, addr = s.accept()
print(addr)
# socket的send,recv方法用于发送和接受数据
c.send('我是服务端,您好!'.encode('UTF-8'))
# 关闭资源
c.close()
3)创建TCP客户端
步骤:创->连
- 创建 socket 对象
- 连接服务器,connect()
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(('192.168.1.10', 30000))
# 建立连接后,server 与 client 虚拟链路建立成功
print(client_socket.recv(2048).decode('UTF-8')) # 接受服务端发送的数据
服务端:
客户端:
多次运行客户端后的服务端: