udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
1.1 简单使用
server端:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM) 建立一个socket对象, 指定以UDP协议的形式来连接
sk.bind(('127.0.0.1',8080)) 指定服务的地址
msg,addr = sk.recvfrom(1024) 接收消息,发送端的地址
print(msg,addr)
sk.sendto(b'HELLO',addr) 给发送端回复消息
sk.close() 关闭socket连接
client端:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.sendto(b'hello',('127.0.0.1',8080)) 直接给服务器发送一段消息
msg,addr = sk.recvfrom(1024) 接收对面的回信
print(msg)
sk.close()
1.2 udp聊天小程序
server端:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9090))
while True:
msg,addr = sk.recvfrom(1024)
print('来自[%s:%s]的消息--%s'%(addr[0],addr[1],msg.decode('utf-8')))
inp = input('>>>')
sk.sendto(inp.encode('utf-8'),addr)
sk.close()
client端:
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
addr = ('127.0.0.1',9090)
while True:
msg = input('>>>')
sk.sendto(msg.encode('utf-8'),addr)
msg_recv,addr = sk.recvfrom(1024)
print(msg_recv.decode('utf-8'))
sk.close()
1.3 时间服务器
server端:
# 需求
# 写一个时间同步的服务器
# 服务端接收请求
# 按照client端发送的时间格式,将服务器时间转换成对应格式
# 发送给客户端
import time
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9000))
while True:
msg,addr = sk.recvfrom(1024)
# msg 客户端发送给server端的时间格式 "%Y-%m-%d %H:%M-%S"
time_format = msg.decode('utf-8')
time_str = time.strftime(time_format)
sk.sendto(time_str.encode('utf-8'),addr)
sk.close()
client端:
# client端每隔一段时间发送请求到服务端
# 发送时间的格式
import time
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
sk.sendto('%Y-%m-%d %H:%M:%S'.encode('utf-8'),('127.0.0.1',9000))
msg,addr = sk.recvfrom(1024)
print(msg.decode('utf-8'))
sk.close()
# 方式一
# 操作系统的定时任务 + python代码的形式
# 方式二
# while True + time.sleep的形式