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()
    
  • 相关阅读:
    hdu5728 PowMod
    CF1156E Special Segments of Permutation
    CF1182E Product Oriented Recurrence
    CF1082E Increasing Frequency
    CF623B Array GCD
    CF1168B Good Triple
    CF1175E Minimal Segment Cover
    php 正则
    windows 下安装composer
    windows apache "The requested operation has failed" 启动失败
  • 原文地址:https://www.cnblogs.com/dadazunzhe/p/11495420.html
Copyright © 2011-2022 走看看