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

  • 相关阅读:
    程序员的自我修养
    c++中的const 限定修饰符
    基于.net开发平台项目案例集锦
    中国期货公司排行及相关上市公司
    备份一些好的书籍名字
    商业银行房贷业务节后骤然下降
    散户炒股七大绝招 巨额获利风险小 (网摘)
    上海2月住宅供应剧减七成 房企捂盘保价
    2009年中国各省人均GDP排名(鄂尔多斯人均GDP将很有可能超过两万美元,全国第一)
    (载自MSN )个人炒汇多年来的一些心得
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/12002256.html
Copyright © 2011-2022 走看看