• 基于UDP的socket tcp和udp的区别(小白进击篇)


    16.基于udp协议的socket通信

    import socket
    server=socket.socket(type=socket.SOCK_DGRAM)
    import socket
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    

    udp不会出现粘包现象,但发送长度有限制

    最大512 发多了容易出现丢包

    不可靠的数据连接 先启动哪一端都不会报错 用于qq微信 可用于开启多个客户端

    为什么udp不会有粘包现象

    你发一个我接收一个(一一对应) 不会产生粘包

    import socket
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sp=input('121313').encode('utf-8')
    phone.sendto(sp,('127.0.0.1',8080))#发送sendto
    msg,addr=phone.recvfrom(1024)
    print(msg.decode('utf-8'),addr)
    phone.close()
    

    发送过大 接收小没有缓冲区就会丢包(windows直接报错)

    
    

    sock_DGRAMsok

    DGRAM datagram#数据报文

    发送sento (发送的信息,发送给的地址)

    接收revefrom

    msg,addr=recvfrom(1024)
    
    msg.decode(1024)
    

    客户端

    import socket
    
    
    client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 基于网络的UDP协议的socket
    
    while 1:
    
        to_server_data = input('>>>:').strip()
        client.sendto(to_server_data.encode('utf-8'),('192.168.14.198',9000))
     #发送消息的时候要带上发送的地址
    
        # data,addr = client.recvfrom(1024)
        # print(f'来自服务端{addr}消息:{data.decode("utf-8")}')
    

    服务端

    #服务端只能被动的接收客户端的消息
    #客户端发消息的时候还会自带地址
    # 回复消息的时候要把对方的地址填写上
    import socket
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#udp
    server.bind(('127.0.0.1',8080))
    msg,addr=server.recvfrom(1024)
    print(msg.decode('utf-8'),addr)
    server.sendto(b'121',addr)
    server.close()
    

    tcp和udp的区别:

    ​ 1.基于 udp协议的socket无需建立管道,先开启服务端或者客户端都行

    ​ 2.基于udp 协议的socket接收一个消息,与发送一个消息都是无连接的

    服务端开启之后没有连接

    ​ 3.只要拿到我的ip地址和端口就都可以给我发信息,我按照顺序接收消息

    17.socketserver

  • 相关阅读:
    Demo
    Demo
    z-yelir-~
    CSP考前总结
    NOIP刷题
    清北学堂
    qsing
    【csp模拟赛九】--dfs3
    【csp模拟赛九】--dfs2
    【csp模拟赛九】--dfs
  • 原文地址:https://www.cnblogs.com/strawberry-1/p/11377389.html
Copyright © 2020-2023  润新知