网络编程之socketserver

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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,265评论 0 6
  • 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编...
    程序员欧阳阅读 2,114评论 1 37
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,384评论 0 10
  • 知 识 点 / 超 人 文章结构:1.网络七层2.TCP/IP3.UDP4.socket5.webSocket6....
    树下敲代码的超人阅读 6,021评论 3 54
  • 重庆“三美” 五月的一场春雨,悄无声息,城市变得洁净,线条柔和。这座迷蒙的山城夹杂着睡意也在不知不觉中悄然醒来。...
    简单就好9427阅读 2,204评论 17 20

友情链接更多精彩内容