python,应用socketserver模块实现并发聊天程序

server.py
import socketserver
class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
            conn = self.request
            while True:
                data = conn.recv(1024)
                if str(data,‘utf8‘) == ‘q‘:
                    break
                print(str(data,‘utf8‘))
                inp = input(‘>>>‘)
                conn.send(bytes(inp,‘utf8‘))
            conn.close()
if __name__ == ‘__main__‘:
    server = socketserver.ThreadingTCPServer((‘127.0.0.1‘,8000),MyServer)
    server.serve_forever()
client.py
import socket
sk = socket.socket()
address = (‘127.0.0.1‘,8000)
sk.connect(address)
while True:
    inp = input(‘>>>‘)
    if inp == ‘q‘:
        print(‘Bye-bye‘)
        break
    sk.send(bytes(inp,‘utf8‘))
    data = sk.recv(1024)
    print(str(data,‘utf8‘))

解析:server.py首先调用了socketserver模块,建立一个自己的类MyServer并继承了socketserver.BaseRequestHandler,重写该类的hander方法,server = socketserver.ThreadingTCPServer((‘127.0.0.1‘,8000),MyServer)命令实现了对IP地址,端口和协议的封装,将用户自己要实现的并发聊天代码写进handle方法,程序执行的时候就是到handle方法中去找代码执行.从而实现了并发聊天.

原文地址:https://www.cnblogs.com/iceberg710815/p/12038304.html

时间: 2024-11-06 04:50:53

python,应用socketserver模块实现并发聊天程序的相关文章

python,利用socketserver模块实现并发聊天

利用socketserver模块很容易实现并发功能,下面的server.py和client.py程序实现了这一功能. #server.pyimport socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): while True: conn = self.request while True: data = conn.recv(1024) if str(data,'utf8') == 'q':

Python学习——socketserver模块

socketserver模块就是socket模块的封装. The socketserver module simplifies the task of writing network servers. socketserver一共有这么几种类型 1 class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True) This uses the Internet TCP protocol

python实现一个简单的网络聊天程序

一.Linux Socket 1.Linux Socke基本上就是BSD Socket(伯克利套接字) 伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信.BSD Socket的应用编程接口已经是网络套接字的抽象标准.大多数其他程序语言使用一种相似的编程接口.由于伯克利套接字是第一个socket,大多数程序员很熟悉它们,所以大量系统把伯克利套接字作为其主要的网络API. 主要的头文件如下,不同的系统可能具体不同. <sys/socket.h> BSD

第七章 Python 盒子:模块、包和程序

前戏部分 独立的程序 命令行参数 模块和import语句 导入模块 使用别名导入模块 导入模块的一部分 模块搜索路径 包 setdefault() 和 defaultdict()处理缺失的键 使用counter()计数 使用有序字典 OrderedDict按键排序 双端序列:栈和队列 使用 itertools 迭代代码结构 使用 pprint()友好输出

基于socketserver模块实现并发的套接字(tcp、udp)

tcp服务端:import socketserver class MyHandler(socketserver.BaseRequestHandler): def handle(self): #通信循环 while True: # print(self.client_address) # print(self.request) #self.request = conn try: data=self.request.recv(1024) if len(data) == 0:break self.re

基于Python完成一个hello/hi的简单的网络聊天程序

一.Socket 套接字简介 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口的组合. 传输层实现端到端的通信,因此,每一个传输层连接有两个端点.那么,传输层连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口.传输层连接的端点叫做套接字(socket).根据RFC793的定义:端口号拼接到IP

python小白-day8 socketserver模块

SocketServer模块 SocketServer内部使用 IO多路复用 以及 "多线程" 和 "多进程" ,从而实现并发处理多个客户端请求的Socket服务端.即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个"线程"或者"进程" 专门负责处理当前客户端的所有请求. ThreadingTCPServer ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 &

python 协程, 异步IO Select 和 selectors 模块 多并发演示

主要内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 selectors 模块 多并发演示 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此: 协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开

Python网络编程之socketserver实现多并发

利用socketserver实现多并发,socketserver内部会调用socket模块进行功能上的实现 client.py客户端脚本文件内容 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import socket # 创建一个socket对象 obj = socket.socket() # 制定服务端的IP地址和端口 obj.connect(('127.0.0.1', 999, )) # 阻塞,等待服务端发送内容,接受服务端发送过来的内容,最大接