Day27 python udp的基本使用、udp循环发送消息

时间:2022-01-27 20:34:08

1.udp基本模型

Day27 python udp的基本使用、udp循环发送消息

 

 udp通信模型中,在通信开始之前,不需要建⽴相关的链接,只需要发送数 据即可,类似于⽣活中,"写信""。

2.基本使用。

udp客户端基本使用流程:

    1.创建soket对象

    2.发送数据,sk.sendto(msg.encode("utf-8"),("127.0.0.1",9000))区别于tcp这个是

    # sendto("需要发送的内容",绑定端口号),tcp中是绑定端口和发送数据是分开的,udp放在了一起。

    3.接受recvfrom 区别tcp中的recv

    4.关闭套接字

客户端代码:

# ### udp 客户端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
msg = "今天天气不错"
# udp 发送数据
# sendto (   "要发送的消息".encode()  ,  (ip,端口)   )
sk.sendto(msg.encode("utf-8"),("127.0.0.1",9000))

# udp 接受数据
msg,addr = sk.recvfrom(1024)
print(msg,addr)
res = msg.decode("utf-8")
print(res)
# 关闭udp连接
sk.close()
运行结果:
b\x8a\xe5\xa4\xa9\xe5\x91\xa8\xe4\xba\x94' ('127.0.0.1', 9000)
Day27 python udp的基本使用、udp循环发送消息

 

服务端代码:

udp中服务器的基本操作流程:

      1.创建socket对象(注意是udp)

      2.bind端口

      3.udp作为服务器一定是先接受到数据。recvfrom

      4.sendto

      5.关闭套接字sk.close()

# ### udp 协议 服务端
import socket
# socket.SOCK_DGRAM 代表udp协议
sk = socket.socket(type = socket.SOCK_DGRAM)
# 其中的socket.socket() 默认的是tcp连接
# 绑定地址 sk.bind( ("127.0.0.1",9000) ) # udp作为服务器,第一次一定是先接受消息 msg,cli_addr = sk.recvfrom(1024) print(msg,cli_addr) msg2 = "对,确实不错,因为今天周五" # sendto ( "要发送的消息".encode() , (ip,端口) ) sk.sendto(msg2.encode("utf-8"),cli_addr) # 关闭udp连接 sk.close()
# 运行结果是:
b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\xa4\xa9\xe6\xb0\x94\xe4\xb8\x8d\xe9\x94\x99' ('127.0.0.1', 50872)

 

 3.udp中带有循环的发送消息

客户端代码:

# ### udp 循环发消息 客户端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)

while True:
    # 发送数据
    message = input("要发送的消息>>")
    sk.sendto( message.encode("utf-8") , ("127.0.0.1" , 9000) )

    # 接受数据
    msg,addr = sk.recvfrom(1024)
    print(msg.decode("utf-8"))
# 关闭udp连接
sk.close()
运行结果:
Day27 python udp的基本使用、udp循环发送消息
 

 

服务器代码:

# ### udp 循环发消息 服务端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
# 绑定地址(在网络上注册该主机,让别人找到你)
sk.bind(  ("127.0.0.1",9000)  )

while True:
    msg,cli_addr = sk.recvfrom(1024)
    print(cli_addr)
    print(msg.decode("utf-8"))
    
    message = input("我要说的话>>")
    # cli_addr ('127.0.0.1', 58745)
    sk.sendto(message.encode("utf-8") , cli_addr)


# 关闭udp连接
sk.close()
运行结果:
Day27 python udp的基本使用、udp循环发送消息

小结:udp的循环也就是你一句我一句,但是可以多个客服端连接一个服务器。