zoukankan      html  css  js  c++  java
  • 网络编程——UDP协议,SocketServer模块介绍

    一、UDP 数据报协议
    特点:
    ①客户端允许发空————默认有报头
    ②协议不会粘包
    ③在服务端不存在的情况下,客户端不会报错
    ④udp 协议支持并发效果
    注:udp在启动服务之后,只能被动等待客户端发消息,客户端发送消息是需要带上服务端地址
           同理,在服务端回消息是也要带上客户端地址
    示例:

    import socket
    
    server = socket.socket(type=socket.SOCK_DGRAM)
    server.bind(('127.0.0.1', 8080))
    
    msg, addr = server.recvfrom(1024)
    print(msg.decode('utf-8'))
    server.sendto(b'hello', addr)
    
    server.close()
    服务端
    import socket
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_addr = ('127.0.0.1', 8080)
    
    client.sendto(b'hello server baby!', server_addr)
    msg, addr = client.recvfrom(1024)
    print(msg, addr)
    客户端

    总结:

    TCP协议就类似于打电话
    
    UDP 协议就类似于发短信

    二、SocketServer模块介绍(让tcp也能支持并发)
    1、基于tcp协议的SocketServer:

    import socketserver
    
    
    class MyBaby(socketserver.BaseRequestHandler):
        def handle(self):
            # 通信循环
            while True:
                # self.request相当于你的conn通信对象
                data,sock = self.request # 收消息
                print(data)
                sock.sendto(data.upper(),self.client_address)  # self.client_address客户端地址
    
    
    if __name__ == '__main__':
        server = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyBaby)
        server.serve_forever()
    TCP 服务端
    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    
    while True:
        client.send(b'hello')
        data = client.recv(1024)
        print(data)
    
    TCP 客户端

    2、基于udp协议的SocketServer:

    import socketserver
    
    
    class MyBaby(socketserver.BaseRequestHandler):
        def handle(self):
            # 通信循环
            while True:
                # self.request相当于你的conn通信对象
                data,sock = self.request # 收消息
                print(data)
                sock.sendto(data.upper(),self.client_address)  # self.client_address客户端地址
    UDP 服务端
    import socket
    import time
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    sever_addr = ('127.0.0.1',8080)
    
    while True:
        client.sendto(b'hello',sever_addr)
        data,addr = client.recvfrom(1024)
        print(data,addr)
        time.sleep(1)
    UDP 客户端
  • 相关阅读:
    android http多请求异步封装对你绝对有用
    浅论Android网络请求库——android-async-http
    Android Http异步请求,Callback
    STL慎重选择删除元素的
    iOS开展
    【Bootstrap】兼容IE8、谷歌和其他主流浏览器的观众IMAX风格的页面
    Codeforces #180 div2 C Parity Game
    vS2010 列表控件 加入右键菜单
    cocos2d-x 3.2 2048——第六部分(最后一章)
    E: 无法获取锁 /var/lib/apt/lists/lock
  • 原文地址:https://www.cnblogs.com/king-home/p/10813847.html
Copyright © 2011-2022 走看看