python3 最简单的网络编程udp(socket数据包datagram)

python

UDP 不是基于连接的、是不连续的、 不可靠的、 效率⽐较⾼。 更像是寄信, 今⼉⼀封, 明⼉⼀封.,想啥时候发什么时候发。不管收件人收到还是没收到。

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。

 

服务器端

import socket

sk = socket.socket(type=socket.SOCK_DGRAM) # 创建socket对象(udp类型) DGRAM数据包datagram

sk.bind(("192.168.36.106", 8888)) # 绑定IP和端口

while 1:

msg, address = sk.recvfrom(1024) # 接受客户端发来的消息,udp必须是客户端先发送消息

print(f"来自客户端的消息:{msg.decode(\'utf-8\')}")

if msg.decode("utf-8").upper() == "BYE":

break

sk.sendto(input(">>>:").strip().encode("utf-8"), address) # 发送消息

sk.close()

UDP服务端

  1、导入socket模块

  2、创建socket对象(UDP类型)

  3、绑定IP地址和端口

  4、接收来自客户端的消息

  5、发送消息给客户端

  6、关闭socket对象 

 

客户端

import socket

sk = socket.socket(type=socket.SOCK_DGRAM) # 创建socket对象(udp类型)

while 1:

sk.sendto(input(">>>:").strip().encode("utf-8"), ("192.168.36.106", 8888)) # udp必须是客户端先发送数据

msg, address = sk.recvfrom(1024)

print(f"来自服务端的消息:{msg.decode(\'utf-8\')}")

if msg.decode("utf-8").upper() == "BYE":

break

sk.close()

 UDP客户端

  1、导入socket模块

  2、创建socket对象(UDP类型)

  3、发送消息给服务端

  4、接收来自服务端的消息

  5、关闭socket对象

 

注意:

  1、先启动服务端,再启动客户端。

  2、切记客户端先发送,服务端收到消息和客户端地址,才能给客户端发送消息。

 

为什么tcp和udp两种协议的端口可以相同?

  操作系统当然有能力根据接受的报文的IP字段里面的协议部分判断这个报文是什么报文,就是说,系统读数据的时候还没有读到上层报文(TCP/UDP)的时候已经知道上层是什么报文了,直接交给相关的内核进程或协议栈处理就可以了。而在同一个协议内部端口号唯一。

 

 

以上是 python3 最简单的网络编程udp(socket数据包datagram) 的全部内容, 来源链接: utcz.com/z/387350.html

回到顶部