iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python基础:网络编程sockets
  • 352
分享到

Python基础:网络编程sockets

网络编程基础Python 2023-01-31 05:01:41 352人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

Socketserver此模块简化了socket的编写。    1、它有一个基类,定义了如何建立连接。BaseServer提供了服务类接口,BaseServer使用了select创建了多线程。BaseServer下面有四个类:tcpServ

Socketserver

此模块简化了socket的编写。

    1、它有一个基类,定义了如何建立连接。BaseServer提供了服务类接口,BaseServer使用了select创建了多线程。BaseServer下面有四个类:tcpServer、UnixStreamServer、UDPserver、UnixDatagramServer。

 

    2、它还提供了请求处理类:定义了如何处理用户数据。定义了三个方法setup\handler\finish,的接口,使用时,重新写对应方法。

 

    3、使用Forktheard和

BaseServer模块结构:

捕获.JPG

服务处理类方法:
作用
BaseServer
超类,提供了api,并利用select创建了多线程。不能直接调用它使用。
TCPServer
创建每个进程的socket,传输TCP数据。同时,也是一个基类。
UDPServer
传输UDP数据。
UnixStreamServer
Unix下使用
UnixDatagramServerUnix下使用
ThreadingTCPServersocketserver多路复用版。UDPServer\UnixStreamServer\UnixDatagramServer的多路复用版前加Threading
服务处理类BaseServer的方法
作用

fileno()

返回服务器监听套接字的整数文件描述符。通常用来传递给select.select(), 以允许一个进程监视多个服务器。
handle_request()

处理单个请求。处理顺序:get_request(), verify_request(), process_request()。

如果用户提供handle()方法抛出异常,将调用服务器的handle_error()方法。

如果self.timeout内没有请求收到, 将调用handle_timeout()并返回handle_request()。

serve_forever(poll_interval=0.5)处理请求,直到一个明确的shutdown()请求。每poll_interval秒轮询一次shutdown。忽略self.timeout。如果你需要做周期性的任务,建议放置在其他线程。
shutdown()
告诉serve_forever()停止。for python2.6。
address_family
地址簇。socket.AF_INET等
HandlerRequestClass
用户提供的请求处理类,为每一个请求创建一个实例。
server_address
侦听的服务器地址。
socketSocket
服务器上侦听传入的请求socket对象的服务器。


下面方法可以被子类重载,它们对服务器对象的外部用户没有影响。
finish_request()实际处理RequestHandlerClass发起的请求并调用其handle()方法。 常用。
get_request()接受socket请求,并返回二元组包含要用于与客户端通信的新socket对象,以及客户端的地址。
handle_error(request, client_address)如果RequestHandlerClass的handle()方法抛出异常时调用。默认操作是打印traceback到标准输出,并继续处理其他请求。
handle_timeout()超时处理。默认对于forking服务器是收集退出的子进程状态,threading服务器则什么都不做
process_request(request, client_address)
调用finish_request()创建RequestHandlerClass的实例。如果需要,此功能可以创建新的进程或线程来处理请求,ForkingMixIn和ThreadingMixIn类做到这点。常用。
server_activate()通过服务器的构造函数来激活服务器。默认的行为只是监听服务器套接字。可重载。
server_bind()通过服务器的构造函数中调用绑定socket到所需的地址。可重载。
verify_request(request, client_address)返回一个布尔值,如果该值为True ,则该请求将被处理,反之请求将被拒绝。此功能可以重写来实现对服务器的访问控制。默认的实现始终返回True。client_address可以限定客户端,比如只处理指定ip区间的请求。 常用。


服务处理类的变量(属性):
作用
allow_reuse_address
是否允许地址重用,默认是False,可以在子类里更改。
request_queue_size
请求队列的大小。如果单个请求需要很长的时间来处理,服务器忙时请求被放置到队列中,最多可以放request_queue_size个。一旦队列已满,来自客户端的请求将得到 “Connection denied”错误。默认值通常为5 ,但可以被子类覆盖。
socket_type
服务器使用的套接字类型,socket.SOCK_STREAM和socket.SOCK_DGRAM等。
timeout
超时时间。以秒为单位,或 None表示没有超时。如果handle_request()在timeout内没有收到请求,将调用handle_timeout()。


 

请求处理类的方法:
作用
setup()
处理请求之前的方法,可以初始化。
handler()
处理请求的方法,处理与Client交互内容。
finish()
handler()处理完成后运行的方法。用于释放和清理。


 

#服务端:

import socketserver

class Mysite(socketserver.BaseRequestHandler):                # 必须继承socketserver基类
    
    def handler(self):                                        # 重写基类里的handler()方法,在这个方法里处理接收、发送请求
        while True:
            recv_data = self.request.recv(1024)
            data = JSON.loads(recv_data.decode())             # 为什么用json?,因为我喜欢。。这包装数字、字符、列表等等数据类型通吃
            print(data)
            
            if data.lower() == "exit":                        # 检测到exit退出
                print("客户端退出!")
                break
                
            self.request.send(json.dumps(data.lower()).encode())    # 发送转换小写的数据给客户端,然后进入到下一个循环
 
my_server = socketserver.TCPserver(("localhost", 9999), Mysite)     # 实例化socketserver,并传送服务器ip、port和子类
my_server.serve_forever()
 
 
# 客户端
import socket
 
class Myclient(object):
     def __init__(obj):                                    # 接收一个socket实例化的对象
         self.conn = obj
     
     def handler(self,ip,prot):                            # 定义一个数据交互的方法
     
         self.conn.connect((ip,port))                      # 绑定链接,其它把它放在init方法里是不是会更好?
         
         while Ture:
         # 循环发送、接收数据
             cmd = input('输入转换的字符,exit退出!')
             
             if cmd.strip().lower() == 'exit':             # 如果输入EXIT退出
                 print('退出!')
                 break
                 
             self.conn.send(json.dumps(cmd).encode())      # 发送输入的数据
             
             recv_data = self.conn.recv(1024)              # 接收服务器转换后的数据
             
             data = json.loads(recv_data.decode())         # json解码
             
             print('转换的:{}'.fORMat(data))
 
my_socket = socket.socket()                                # 实例化socket对象
my_client = Myclient(my_socket)                            # 实例化自定义类,并传入实例化的socket对象
my_client.handler("localhost",9999)                        # 调用数据交互方法


"""以上代码博客里手打,未经测试。 """

 

 

 

 

其它参考资料:

https://www.cnblogs.com/MnCu8261/p/5546823.html

Https://www.cnblogs.com/sunailong/p/5058786.html

https://www.cnblogs.com/eric_yi/p/7701381.html

 

--结束END--

本文标题: Python基础:网络编程sockets

本文链接: https://www.lsjlt.com/news/189176.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python基础:网络编程sockets
    socketserver此模块简化了socket的编写。    1、它有一个基类,定义了如何建立连接。BaseServer提供了服务类接口,BaseServer使用了select创建了多线程。BaseServer下面有四个类:TCPServ...
    99+
    2023-01-31
    网络编程 基础 Python
  • Python基础:网络编程socket基
    socket也叫套接字,是对各种协议的封装,实现收发数据。Python里socket工作过程:(图片来自网络)socket在Python中实际上是一个模块,实现发送和接收数据的功能。因为socket是一个类,所以只导入模块需要使用socke...
    99+
    2023-01-31
    网络编程 基础 Python
  • python编程之网络基础
    1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。 套接字起源于20世纪70年代,有时人们把套接字成为“伯克利套接字”或“BSD套接字”,期初,套接字被设计用在同一台主机上多个应用...
    99+
    2023-01-31
    基础 网络 python
  • 《Python网络编程基础》笔记
                              python网络编程基础                           ================== Author: lujun9972 <luj...
    99+
    2023-01-31
    网络编程 基础 笔记
  • 详解python的网络编程基础
    目录一.什么是网络编程二.socket1.socket的基本语法2.与socket有关的一些函数服务端函数客户端函数公共函数三.程序需求服务端分析客户端分析四.代码升级加上通信循环&...
    99+
    2024-04-02
  • Java 网络编程基础
    文章目录 前言什么是网络编程网络编程基础知识网络通讯流程长连接和短连接Socket Java 网络编程总结 前言 一个网络请求、服务之间的调用都需要进行网络通讯,在日常开发时我们可能并不会关心我们的服务端是怎么接收到请求的、...
    99+
    2023-08-16
    java 网络 开发语言
  • 【100天精通Python】Day46:Python网络编程_网络编程基础与入门
    目录 专栏导读  1 网络编程的基础 2. 基本概念和协议 2.1 计算机网络基础 2.2 网络协议、IP地址、端口号 2.3  常见网络协议 3. 套接字编程 3.1 套接字的基本概念 3.2 套接字的基本操作 3.3 套接字通信模型和方...
    99+
    2023-09-06
    前端 python 网络编程
  • Java网络编程基础详解
    目录网络编程1.1 概述1.网络编程中有两个主要的问题2.网络编程中的三要素1.3、IP1.4、端口1.5、通信协议UDP协议TCP协议1.6、TCP模拟通信客户端服务器文件上传1....
    99+
    2024-04-02
  • python的网络编程基础知识有哪些
    这篇“python的网络编程基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python的网络编程基础知识有哪些...
    99+
    2023-06-26
  • Netty网络编程零基础入门
    目录OSI七层网络模型Socket技术TCP协议Java语言创建socket应用http协议OSI七层网络模型 应用层:Http协议、文件服务器、邮件服务器 表示层:数据转换解决不同...
    99+
    2022-11-13
    Netty网络编程 Netty编程
  • Java网络编程基础用法详解
    目录Socket 编程ServerSocket 类的方法Socket 类的方法InetAddress 类的方法Socket 通讯实例网络编程是指编写运行在多个设备(计算机)的程序,这...
    99+
    2023-05-19
    Java 网络编程 Java 网络
  • 浅谈java网络编程基础知识
    这篇文章主要浅谈java网络编程基础知识,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。网络基础知识1、OSI分层模型和TCP/IP分层模型的对应关系这里对于7层模型不展开来讲,只选择跟这次系列...
    99+
    2023-05-30
    java ava
  • python网络-计算机网络基础(23)
    一、网络简介 网络是由节点和连线构成,表示诸多对象及其相互联系。 一个人玩:   两个人玩:   多个人玩: 说明 网络就是一种辅助双方或者多方能够连接在一起的工具 如果没有网络可想单机的世界是多么的孤单 使用网络的目的 就是...
    99+
    2023-01-31
    计算机网络 基础 网络
  • Python 编程基础
    数据类型 None 值 整型 浮点型 布尔类型 True,False 字符串 元组 tuple(),有序,不可变 例: t1 = (1,)  t2 = (1,'Hello',1.0,True) 列表 list[],有序,可变 例...
    99+
    2023-01-31
    基础 Python
  • Linux系统编程中的网络编程基础是什么
    这篇文章主要为大家分析了Linux系统编程中的网络编程基础是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统编程中的网络编程基础是什么”的知...
    99+
    2023-06-28
  • 网络基础入门(网络基础概念详解)
      本篇文章主要是对网络初学的概念进行解释,可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类  二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2...
    99+
    2023-10-03
    网络
  • 如何理解Go语言基础之网络编程
    本篇内容主要讲解“如何理解Go语言基础之网络编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Go语言基础之网络编程”吧!socker编程我们所学的TC...
    99+
    2024-04-02
  • C#网络编程入门基础知识有哪些
    这篇文章主要介绍“C#网络编程入门基础知识有哪些”,在日常操作中,相信很多人在C#网络编程入门基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#网络编程入门基础知识有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • 网络基础(一)桥接网络
    网络基础知识 桥接网络 桥接网络是一种网络设计技术,其目的是将两个或多个网络段连接在一起,使它们在逻辑上表现为单个网络。这通过使用网络桥来实现,网络桥工作在数据链路层(第2层),只关心MAC地址,而不...
    99+
    2023-09-01
    网络
  • Python 网络编程
    Python 网络编程 Python 提供了两个级别访问的网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统 Socket 接口的全部方法。 高级别的网络服务模块 S...
    99+
    2023-08-31
    网络 服务器 运维
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作