zoukankan      html  css  js  c++  java
  • Python 3 udp 套接字

    Python 3 udp套接字

    TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议

    使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达并不清楚。

    虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议

    基于UDP的套接字 udp是无链接的,先启动哪一端都不会报错

    udp服务端

    ss = socket()   #创建一个服务器的套接字
    
    ss.bind()       #绑定服务器套接字
    
    inf_loop:       #服务器无限循环
    
         cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
    
    ss.close()                          # 关闭服务器套接字

    udp客户端

    cs = socket()   # 创建客户套接字
    
    comm_loop:      # 通讯循环
    
        cs.sendto()/cs.recvfrom()   # 对话(发送/接收)
    
    cs.close()                      # 关闭客户套接字

     udp套接字简单示例

    from socket import *
    
    udp_server=socket(AF_INET,SOCK_DGRAM)
    
    udp_server.bind(('127.0.0.1',8080))
    
     
    
    while True:
    
        data,client_addr=udp_server.recvfrom(1024)
    
        print(data,client_addr)
    
        udp_server.sendto(data.upper(),client_addr)
    服务端
    from socket import *
    
    udp_client=socket(AF_INET,SOCK_DGRAM)
    
    while True:
    
        msg=input('>>: ').strip()
    
        udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
    
        data,server_addr=udp_client.recvfrom(1024)
    
    print(data.decode('utf-8'))
    客户端

    基于udp套接字不会粘包 

    from socket import *
    
    udp_server=socket(AF_INET,SOCK_DGRAM)
    
    udp_server.bind(('127.0.0.1',8080))
    
     
    
    data1,client_addr=udp_server.recvfrom(1)  # windows 系统会报异常 linux 系统不会报异常
    
    print('data1',data1)
    
    data2,client_addr=udp_server.recvfrom(1024)
    
    print('data2',data2)
    服务端
    from socket import *
    
     
    
    udp_client=socket(AF_INET,SOCK_DGRAM)
    
     
    
    udp_client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080))
    
    udp_client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))
    客户端

    udp套接字的并发

    import socketserver
    
    class MyUDPhandler(socketserver.BaseRequestHandler):
    
        def handle(self):
    
            print(self.request)
    
            self.request[1].sendto(self.request[0].upper(),self.client_address)
    
     
    
    if __name__ == '__main__':
    
        s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUDPhandler)
    
        s.serve_forever()
    服务端
    from socket import *
    
    udp_client=socket(AF_INET,SOCK_DGRAM)
    
    while True:
    
        msg=input('>>: ').strip()
    
        udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
    
        data,server_addr=udp_client.recvfrom(1024)
    
        print(data.decode('utf-8'))
    客户端
  • 相关阅读:
    JQuery FlexiGrid的asp.net完美解决方案:dotNetFlexGrid.Net原生的异步表格控件 简介和应用效果截图
    利用View静态画图
    Context部分译(http://developer.android.com/reference/android/content/Context.html))
    java 利用Scanner解析逗号字符串
    Canvas
    SurfaceView部分译
    handler
    Centos7上安装jdk8
    Opera 使用迅雷下载
    fopen()
  • 原文地址:https://www.cnblogs.com/qiangyuge/p/7445730.html
Copyright © 2011-2022 走看看