zoukankan      html  css  js  c++  java
  • UDP协议实现socket

    UDP协议实现socket

    UDP协议的特点

    • UDP是无链接的,先启动哪一端都不会报错(不可靠)
    • UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到
    • 因为自带包头,所以不会出现粘包现象,但是多余的内容不会接收,所以会丢包。

    UDP的使用

    • UPD协议一般不用于传输大数据。
    • UDP套接字虽然没有粘包问题,但是不能替代TCP套接字,因为UPD协议有一个缺陷:如果数据发送的途中,数据丢失,则数据就丢失了,而TCP协议则不会有这种缺陷,因此一般UPD套接字用户无关紧要的数据发送,例如qq聊天。

    实现简单通信循环聊天

    # server
    
    import socket
    # 指定连接协议为udp协议
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',8080))
    # 绑定地址后即可首发数据,无需监听
    while True:
        # recvfrom接收传来的信息和client端地址
        msg,addr = sk.recvfrom(1024)
        print(msg.decode('utf8'))
        info = input('>>>')
        info = '来自主机的消息:'+info
        # 发送数据的时候要带上addr
        sk.sendto(info.encode('utf8'),addr)
    sk.close()
    
    # client1
    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)
    # 指定收发数据的server端地址
    addr = ('127.0.0.1',8080)
    while True:
        info = input('大哥:')
        info = '来自大哥的消息:' + info
        sk.sendto(info.encode('utf8'),addr)
        msg,addr = sk.recvfrom(1024)
        print(msg.decode('utf8'))
    sk.close()
    
    # client2
    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)
    # 指定收发数据的server端地址
    addr = ('127.0.0.1',8080)
    while True:
        info = input('二哥:')
        info = '来自二哥的消息:' + info
        sk.sendto(info.encode('utf8'),addr)
        msg,addr = sk.recvfrom(1024)
        print(msg.decode('utf8'))
    sk.close()
    
  • 相关阅读:
    CodeForces 1332D Walk on Matrix
    CodeForces 1324F Maximum White Subtree
    CodeForces-1324E-Sleeping-Schedule
    CodeForces-1324D-Pair-of-Topics
    理解字节序 大端字节序和小端字节序
    公钥 私钥 数字证书概念理解
    简要介绍 X Window System (又称为X11 or X)
    动态规划的简洁说明
    二分法的研究
    两个变量的内容交换
  • 原文地址:https://www.cnblogs.com/dadazunzhe/p/11495420.html
Copyright © 2011-2022 走看看