基于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.request.send(data.upper())            except ConnectionResetError:                break

if __name__ == ‘__main__‘:    s=socketserver.ThreadingTCPServer((‘127.0.0.1‘,8080),MyHandler,bind_and_activate=True)

s.serve_forever()  # 代表连接循环    # 循环建立连接,每建立一个连接就会启动一个线程(服务员)+调用Myhanlder类产生一个对象,调用该对象下的handle方法,专门与刚刚建立好的连接做通信循环

客户端1:
import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.connect((‘127.0.0.1‘,8080)) # 指定服务端ip和端口

while True:    # msg=input(‘>>: ‘).strip() #msg=‘‘    msg = ‘client33333‘  # msg=‘‘    if len(msg) == 0:continue    phone.send(msg.encode(‘utf-8‘))    data=phone.recv(1024)    print(data)

phone.close()

客户端2:同客户端1...udp服务端:
import socketserver

class MyHandler(socketserver.BaseRequestHandler):    def handle(self):        #通信循环        # print(self.client_address)        # print(self.request)

data=self.request[0]        print(‘客户消息‘,data)        self.request[1].sendto(data.upper(),self.client_address)

if __name__ == ‘__main__‘:    s=socketserver.ThreadingUDPServer((‘127.0.0.1‘,8080),MyHandler)    s.serve_forever()
客户端:
import socket

client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp

while True:    # msg=input(‘>>: ‘).strip() #msg=‘‘    msg=‘client444444‘

client.sendto(msg.encode(‘utf-8‘),(‘127.0.0.1‘,8080))    data,server_addr=client.recvfrom(1024)    print(data)

client.close()


原文地址:https://www.cnblogs.com/wangcheng9418/p/9974971.html

时间: 2024-10-16 19:32:26

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

python 并发编程 基于gevent模块 协程池 实现并发的套接字通信

基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: msg = input(">>>:").strip() if not msg:break client.send(msg.encode("utf-8")) data = client.recv(

并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信

1.协程并发:切+保存状态单线程下实现并发:协程 切+ 保存状态 yield 遇到io切,提高效率 遇到计算切,并没有提高效率 检测单线程下 IO行为 io阻塞 切 相当于骗操作系统 一直处于计算协程:...单线程下实现并发:根本目标:遇到IO就切,一个线程的整体IO降下来程序用的cpu 时间长,就叫执行效率高效率最高:多个进程 (多个cpu) 每个进程开多个线程 每个线程用到协程 (IO就切)总结协程特点: 1 #并发执行 2 import time 3 4 def producer(): 5

27 Apr 18 GIL 多进程多线程使用场景 线程互斥锁与GIL对比 基于多线程实现并发的套接字通信 进程池与线程池 同步、异步、阻塞、非阻塞

27 Apr 18 一.全局解释器锁 (GIL) 运行test.py的流程: a.将python解释器的代码从硬盘读入内存 b.将test.py的代码从硬盘读入内存  (一个进程内装有两份代码) c.将test.py中的代码像字符串一样读入python解释器中解析执行 1 .GIL:全局解释器锁 (CPython解释器的特性) In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple na

python全栈脱产第37天------进程池与线程池、协程、gevent模块、单线程下实现并发的套接字通信

一.进程池与线程池 调用concurrent.futures下的ThreadPoolExecutor,ProcessPoolExecutor来实现 提交任务有两种方式:同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,在执行下一段代码,是串行的 异步调用:提交完一个任务之后,不在原地等待,直接运行下一段代码,任务是并发的 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutorimp

socket套接字TCP API

socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点,或称之为句柄.IP地址+端口号就可以唯一确定一个socket. TCP/IP协议族包括传输层(TCP/UDP),网络层(ICMP/IP/IGMP),链路层(ARP/RARP).应用层通常使用socket地址,即IP地址+端口号来确定通信的对端.而socket正是TCP/IP协议族与应用层之间的接口层,可以说对上层提供了TCP/IP协议族的一种封装,无需关心更底层的

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模块实现并发聊天程序

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.

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

004.原始套接字,拼接UDP数据包,通信

大致流程: 建立一个client端,一个server端,自己构建IP头和UDP头,写入数据(hello,world!)后通过原始套接字(SOCK_RAW)将包发出去. server端收到数据后,打印UDP数据并发送确认消息(yes),client收到yes后将其打印. 其中: client端IP:192.168.11.104 端口:8600 server端IP:192.168.11.105 端口:8686 注意事项: 1.运行原始套接字socket需要有root权限. 2.注意主机字节序和网络字