注意:正是由于基于udp协议的Socket编程没有链接一说,所以:基于udp协议的套接字编程可以轻易的实现多客户端同时并发与服务端通信。
#-*-coding:utf-8-*-
#基于udp协议的套接字编程与基于tcp协议的套接字编程有部分不同
#基于udp协议的编程,没有链接一说;看下面代码
#服务端:
from socket import *
ip_port=("127.0.0.1",8080)
buffer_size=1024
udp_service=socket(AF_INET,SOCK_DGRAM)
#基于udp协议的套接字建立的对象不同于tcp协议的,tcp这里的参数:SOCK_STREAM,即:tcp数据流
#而,upd这里的参数:SOCK_DGRAM,即:数据报
#但是,tcp\udp都有一个AF_INET参数,即:基于网络
udp_service.bind(ip_port)
while True:
msg,addr=udp_service.recvfrom(buffer_size)
#基于udp协议的套接字,收消息使用recvfrom()方法,
# 且收到的内容为tuple类型,内容包括:客户端真实想发的信息,客户端地址
print(msg.decode("utf-8"))
udp_service.sendto("大家好才是真的好!".encode("utf-8"),addr)
# 基于udp协议的套接字,发消息使用sendto(内容,地址)方法;
udp_service.close()
#-*-coding:utf-8-*-
#基于udp协议的套接字编程
#客户端
from socket import *
ip_port=("127.0.0.1",8080)
buffer_size=1024
client=socket(AF_INET,SOCK_DGRAM)
while True:
client_msg=input(">>>:").strip()
if not client_msg:continue
client.sendto(client_msg.encode("utf-8"),ip_port)
msg,addr=client.recvfrom(buffer_size)
print(msg.decode("utf-8"))
# print(addr)
client.close()
利用udp协议的套接字编程,编写一个简单的时间服务:即:客户端输入时间格式,返回当前时间;如果输入空,返回默认格式的时间;
时间服务端:
from socket import *
import time
ip_sort=("127.0.0.1",8080)
buffersize=1024
time_service=socket(AF_INET,SOCK_DGRAM)#数据报
time_service.bind(ip_sort)
while True:
data,addr=time_service.recvfrom(buffersize)
if not data :
time_t=time.strftime("%Y-%m-%d %X")
else:
time_t=time.strftime(data.decode("utf-8"))
time_service.sendto(time_t.encode("utf-8"),addr)
time_service.close()
客户端:
from socket import *
time_client=socket(AF_INET,SOCK_DGRAM)
ip_sort=("127.0.0.1",8080)
suffersize=1024
while True:
data=input(">>>:请输入时间格式:").strip()
time_client.sendto(data.encode("utf-8"),ip_sort)
time_t,addr=time_client.recvfrom(suffersize)
print(time_t.decode("utf-8"))
time_client.close()