套接字--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()

 

posted @ 2025-05-14 21:03  尐少  阅读(9)  评论(0)    收藏  举报