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

  • 相关阅读:
    十七、Java基础之final
    十六、Java基础之super
    十五、Java基础之多态
    十四、Java基础之方法重写/覆盖
    十三、Java基础之单例模式
    十二、Java基础之继承
    十一、Java基础之static关键字
    十、Java基础之this介绍
    九、Java基础之参数传递(值传递)
    利用ResultFilter实现asp.net mvc3 页面静态化
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/12002256.html
Copyright © 2020-2023  润新知