美文网首页
网络编程之socketserver

网络编程之socketserver

作者: 大千世界1998 | 来源:发表于2018-10-10 21:54 被阅读0次

    socketserver概述

        socketserver 是 python 中提供的一个可以用于面向对象服务端开发的一个高级模块,封装了底层 socket 的大量操作实现,通过提供面向对象的操作方式简化程序开发。

    socketserver 模块:

    属性/函数/类型 描述
    BaseServer 基础服务类型,包含核心功能
    TCPServer/UDPServer TCP/UDP服务类型
    UnixStreamServer/UnixDatagramServer 面向文件的TCP/UDP服务类型
    ForkingMiXin/ThreadingMiXin 核心派生线程类型
    ForkingTCPServer/ForkingUDPServer 线程派生类型和TCP/UDP混合类型
    ThreadingTCPServer/ThreadingUDPServer 线程派生类型和TCP/UDP混合类型
    BaseRequestHandler 基础请求处理类型
    StreamRequestHandler/DatagramRequestHandler 面向连接/无连接的请求处理类型

    TCP编程

    基于socketserver的TCP服务端的编程开发:

    from socketserver import (TCPServer as TCP, StreamRequestHandler as SRH)
    
    
    # 自定义请求处理类型
    class MyRequestHandler(SRH):
        # 重写请求处理方法
        def handle(self):
            # 父类中,请求对象:self.request
            # 接收客户端消息
            print("一个客户端已连接", self.client_address)
    
            # 发送消息
            self.request.send("my name is server".encode("utf-8"))
    
            # 接收消息
            info = self.request.recv(1024)
            print(info.decode("utf-8"))
    
    
    if __name__ == "__main__":
        ADDRESS = ("", 22666)
        # 创建TCP服务器
        tcp_server = TCP(ADDRESS, MyRequestHandler)
        print("server is starting, waiting for connect...")
        # 启动服务器
        tcp_server.serve_forever()
    
    

        客户端的操作也相对比较简单,唯一需要注意的是:使用 TCPServer 构建的 TCP 服务端在和客户端进行数据通信的过程中,每一次的数据通信都会使用一个新的套接字对象,所以客户端程序需要改造~每次和服务器进行数据交互时都需要创建一个新套接字。

    import socket
    
    ADDRESS = ("IP地址", 22666)
    
    while True:
    
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(ADDRESS)
    
        info = client.recv(1024)
        print(info.decode("utf-8"))
    
        msg = input("massage:")
        client.send(msg.encode("utf-8"))
        client.close()
    

    UDP编程

    基于socketserver的UDP服务端的编程开发:

    from socketserver import (UDPServer as UDP, DatagramRequestHandler as DRH)
    
    
    # 自定义请求处理类型
    class MyRequestHandler(DRH):
        # 重写请求处理方法
        def handle(self):
            # 父类中,请求对象:self.request
            # 接收客户端消息
            print("一个客户端已连接", self.client_address)
    
            # 接收消息
            info = self.rfile.readline()
            print(info.decode("utf-8"))
    
            # 发送消息
            self.wfile.write("my name is server".encode("utf-8"))
    
    
    if __name__ == "__main__":
        ADDRESS = ("", 22666)
        # 创建TCP服务器
        udp_server = UDP(ADDRESS, MyRequestHandler)
        print("server is starting, waiting for connect...")
        # 启动服务器
        udp_server.serve_forever()
    

    基于socketserver的UDP客户端的编程开发:

    import socket
    
    ADDRESS = ("IP地址", 22666)
    
    while True:
    
        client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
        msg = input("massage:")
        client.sendto(msg.encode("utf-8"), ADDRESS)
    
        info, addr = client.recvfrom(1024)
        print(addr, "say:", info)  
    
        client.close()
    

    相关文章

      网友评论

          本文标题:网络编程之socketserver

          本文链接:https://www.haomeiwen.com/subject/wugmaftx.html