zoukankan      html  css  js  c++  java
  • Python 第三十一章 UDP协议的socket

    UDP协议

    """
    UDP与TCP的区别
    TCP面向链接的协议,流式协议,安全可靠,效率低的协议,用于传输文件
    UDP用户数据报协议,效率高,不安全不可靠的协议,用于聊天软件
    1.基于udp协议的socket:无须建立管道,先开服务端或者客户端都可以
    2.基于udp协议的socket:接收一个消息,发送一个消息都是无连接的,任意一个客户端都可以与服务端沟通(有先后顺序)
    3.基于udp协议的socket:只要拿到ip地址和端口就可以给服务端发消息,服务端按照顺序接收消息
    
    """
    

    服务端

    # 导入socket模块
    import socket
    # 创建一个server对象
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 基于网络的UDP协议的socket 面向数据报 (第一个聊完了才能与第二个聊)
    
    # 连接本地ip
    server.bind(('127.0.0.1',9000))
    # while循环发送消息
    while 1:
        # 阻塞,等待客户端来消息
        from_client_data = server.recvfrom(1024) # 谁连我,谁就能发消息
        # 1024 最大字节1024
    
        # 输出客户端的消息
        print(from_client_data)
        # from_client_data得到的第一个是客户端的消息(转成字节型)第二个是客户端的ip地址和端口
        # b'x88xe6x81xaf', ('127.0.0.1', 56104))
    
        # 输出客户端的消息
        print(f'来自客户端{from_client_data[1]}:{from_client_data[0].decode("utf-8")}')
        # from_client_data[1] 客户端的ip地址
        # {from_client_data[0] 客户端的字节型的消息 decode("utf-8") 解析成utf-8格式
    
        # 给客户端发送消息
        to_client_data = input('>>>给客户端发消息')
        # 服务端把消息发送给客户端用sendto方法
        server.sendto(to_client_data.encode('utf-8'),from_client_data[1])
        # o_client_data.encode('utf-8') 转成字节型
        # from_client_data[1] 客户端的ip地址
    

    客户端

    # 导入socket模块
    import socket
    # 创建一个client对象
    client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 基于网络的UDP协议的socket 面向数据报 (可以开启多个客户端与服务端连接)
    
    # while循环发送消息
    while 1:
       # 给服务端发送消息
       to_server_data = input('>>>服务端发消息')
       # 客户端把消息发送给服务端发送消息用sendto方法
       client.sendto(to_server_data.encode('utf-8'),('127.0.0.1',9000)) # 服务器地址直接写后面
       # to_server_data.encode('utf-8') 消息转成字节类型
       # ('127.0.0.1',9000) 发送到服务端,直接跟服务端的地址和端口号
    
       # 接收的消息
       data,addr = client.recvfrom(1024)
       print(data,addr)
       # data 服务端的消息字节型
       # addr 服务端的ip地址
       # 1024 最大字节1024
    
       # 输出接收到的服务端的消息
       print(f'来自服务端{addr}的消息:{data.decode("utf-8")}')
       # data.decode("utf-8") 将数据转成utf-8格式
    
    

    纯代码

    服务端:
    import socket
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 基于网络的UDP协议的socket
    server.bind(('127.0.0.1',9000))
    while 1:
        from_client_data = server.recvfrom(1024)  # 阻塞,等待客户来消息
        print(f'33[1;35;0m来自客户端{from_client_data[1]}: {from_client_data[0].decode("utf-8")} 33[0m')
        to_client_data = input('请服务端输入').strip()
        server.sendto(to_client_data.encode('utf-8'),from_client_data[1])
    客户端:
    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'),('127.0.0.1',9000))
        data,addr = client.recvfrom(1024)
        print(f'来自服务端{addr}消息:{data.decode("utf-8")}')
    
  • 相关阅读:
    百度之星2019 初赛一 题解
    [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
    [BZOJ2157]旅游(树链剖分/LCT)
    [BZOJ3230]相似子串(后缀数组)
    回文树/回文自动机(PAM)学习笔记
    [CF30E]Tricky and Clever Password(KMP+manacher)
    APIO2019题解
    代码大全
    算法竞赛常用资料整理
    手动修复 Flash CS3 简中化不完全问题
  • 原文地址:https://www.cnblogs.com/zhangshan33/p/11366255.html
Copyright © 2011-2022 走看看