• 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()
    
  • 相关阅读:
    魔改版BBR
    termux 开启 sshd
    Basic berkeley socket functions
    mosh
    XOR 加密
    指定so动态链接库连接器
    UTF8 UTF16 之间的互相转换
    MySQL C API概述
    C JAVA你可能不知道的那些编程细节
    虚拟内存
  • 原文地址:https://www.cnblogs.com/dadazunzhe/p/11495420.html
Copyright © 2020-2023  润新知