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

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)的时候已经知道上层是什么报文了,直接交给相关的内核进程或协议栈处理就可以了。而在同一个协议内部端口号唯一。

原文地址:https://www.cnblogs.com/lilyxiaoyy/p/12002256.html