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 客户端
  • 相关阅读:
    node相关--socket.io
    node相关--WebSocket
    node工具--express
    node工具--connect
    HTTP基础01--web与互联网基础
    nodeAPI--HTTP
    nodeAPI--TCP
    js:语言精髓笔记13--语言技巧
    js:语言精髓笔记12--动态语言特性(2)
    js:语言精髓笔记11--动态语言特性(1)
  • 原文地址:https://www.cnblogs.com/king-home/p/10813847.html
Copyright © 2011-2022 走看看