套接字--socket
socket.socket() 参数:
family 指定网络协议,AF_INET IPv4(默认)、AF_INET6 IPv6
type 传输模式,SOCK_STREAM TCP(默认)、SOCK_DGRAM UDP
proto 协议编号,通常自动匹配
fileno 文件描述符,用户低级操作或套接字继承使用
import socket # TCP # 服务器 sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) # 创建套接字对象 sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 允许地址重用,可绑定同一地址端口 sk.bind(('0.0.0.0', 8080)) # 绑定地址端口并开启服务,注意地址端口做为元组传递 sk.listen(4) # 开始监听并设置最大连接数 client_socket, addr = sk.accept() # 接收客户端连接,accept返回连接对象和对象地址 print(f"客户端{addr}连接成功") data = client_socket.recv(1024).decode('utf-8') # 接收数据并设置最大接收字节数 response = "已收到消息" client_socket.send(response.encode()) # 发送响应 client_socket.close() # 关闭客户端连接 sk.close() # 关闭服务器 #客户端 T_lient = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) # 创建套接字对象 T_lient.connect(('0.0.0.0', 8080)) # 连接服务器 msg = "Hello!" T_lient.send(msg.encode()) # 发送消息 response = T_lient.recv(1024) print(f"服务器响应:{response.decode()}") # 接收响应 T_lient.close() # 断开连接
import socket # UDP协议 U_sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) # socket.SOCK_DGRAM 是 UDP协议 #服务端 U_sk.bind(('0.0.0.0', 8090)) print('UDP服务启动') # 非面向连接,无需listen监听和accept建立连接 data, addr = U_sk.recvfrom(1024) # 接收数据,因协议不同,接收方法不同 print(f"收到客户端{addr}的消息:{data}") response = = "已收到" U_sk.sendto(response.encode(), addr) # 回复客户端消息,需带对象地址 U_sk.close() # 客户端 U_clinet = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) msg = "helle, UDP" U_client.sendto(msg.encode(), ('0.0.0.0', 8090) response, addr = U_client.recvfrom(1024) print(f"服务器返回{response}") U_client.close()

浙公网安备 33010602011771号