首页 > 其他分享 >两种实现TCP并发的方式

两种实现TCP并发的方式

时间:2024-01-17 20:46:23浏览次数:23  
标签:两种 utf socket TCP break 并发 client data conn

【一】socketserver模块实现TCP并发服务

  • 服务端
import socketserver


class RequesterHandle(socketserver.BaseRequestHandler):
    def handle(self) -> None:
        print(self.request)
        print(self.client_address)  # self.request 相当于TCP协议的conn
        # 传输数据
        while True:
            try:
                data = self.request.recv(1024)
            except:
                break
            if not data:
                break
            data = data.decode('utf-8')
            print(f'客户端:>>>>{data}')
            self.request.send(data.upper().encode('utf-8'))


sk = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), RequesterHandle)
sk.serve_forever()  # 循环获取连接对象,每起一个对象,都会起一个线程,然后把连接对象交给线程
  • 客户端(不变)
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))
while True:
    to_data = input('请输入小写字母:>>>>').strip()
    client.send(to_data.encode('utf-8'))
    if to_data == 'q':
        break
    if not to_data:
        continue
    data = client.recv(1024).decode('utf-8')
    print(f'服务端:>>>>{data}')
client.close()

【二】multiprocessing模块实现TCP并发服务

  • 服务端
import socket
from multiprocessing import Process
from socket import SOL_SOCKET, SO_REUSEADDR
server = socket.socket()
server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
server.bind(('127.0.0.1', 8087))
server.listen(5)


def process(conn):
    while True:
        try:
            data = conn.recv(1024).decode('utf-8')
        except:
            break
        if not data:
            break
        to_data = data.upper()
        conn.send(to_data.encode('utf-8'))
        print(f'正在为{conn}服务')
    conn.close()


if __name__ == '__main__':
    while True:
        conn, addr = server.accept()
        p = Process(target=process, args=(conn,))
        p.start()

  • 客户端(不变)
import socket

client = socket.socket()
client.connect(('127.0.0.1', 8087))
while True:
    to_data = input('请输入消息:>>>>').strip()
    client.send(to_data.encode('utf-8'))
    if to_data == 'q':
        break
    if not to_data:
        continue
    print(client.recv(1024).decode('utf-8'))
client.close()

标签:两种,utf,socket,TCP,break,并发,client,data,conn
From: https://www.cnblogs.com/Hqqqq/p/17971130

相关文章

  • 并发编程
    操作系统(一)引入顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。所以想要真正了解进程,必......
  • 使用nginx代理emqx的TCP、WS、WSS连接请求
    项目代理关系: 注:主机上已存在名为:nginx-proxy的一级nginx的代理,将监听了主机的80、443端口docker-compose.ymlversion:"3.7"services:emqx:image:emqx/emqx:4.4.18restart:unless-stoppedcontainer_name:emqxenvironment:EMQX_ADMI......
  • TCP 拥塞控制对数据延迟的影响
    哈喽大家好,我是咸鱼今天分享一篇文章,是关于TCP拥塞控制对数据延迟产生的影响的。作者在服务延迟变高之后进行抓包分析,结果发现时间花在了TCP本身的机制上面:客户端并不是将请求一股脑发送给服务端,而是只发送了一部分,等到接收到服务端的ACK,然后继续再发送,这就造成了额外的RTT......
  • 网络编程之TCP协议的三次握手和四次挥手
    引言见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。面试官:然后呢?求职者:这就是三次......
  • 网络编程之基于TCP协议的socket套接字编程
    基于TCP的套接字【1】方法简介tcp是基于链接的必须先启动服务端然后再启动客户端去链接服务端tcp服务端server=socket()#创建服务器套接字server.bind()#把地址绑定到套接字server.listen()#监听链接inf_loop:#服务器无限循环conn=serv......
  • 网络编程TCP UDP
    网络编程(1)什么是网络编程网络编程是指通过编程语言在计算机之间建立通信的一种方式。它是在互联网上进行数据传输的关键组成部分,使计算机能够相互通信、交换信息和共享资源。网络编程涉及许多不同的技术和协议,包括TCP/IP(传输控制协议/因特网协议),HTTP(超文本传输协议),FTP(文件传......
  • 【6.0】socketserver实现并发
    【一】引入socket并不能多并发,只能支持一个用户socketserver模块是Python中用于创建网络服务器的模块,提供了一种简单而一致的接口。它是构建网络服务器的框架,处理了创建、维护和关闭连接的许多底层细节socketserver是socket的再封装。【二】socketserver介绍【1】简......
  • Scoket层(TCP,TDP)
    【一】Scoket层在哪还是用图来说话,一目了然。【二】什么是socketSocket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面对用户来说,一组简单的接口就是全部,让Socket去组织......
  • OSI七层协议和TCP,IP五层协议
    OSI七层协议介绍互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层tcp/ip四层应用层传输层网络层网络接口层tcp/ip五层应用层传输层网络层数据链路层物理层osi七层应用层表示层会话层传输层网络层数据链路层物理层tcp/ip四层应......
  • jmeter并发与持续压测生成测试报告操作日志
    接口压测的方式:1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种方式可以控制压测周期时间指定并发数 例1:设置线程数:10;设置执行时间:0;设置循环次数:5说明:使10个线程启动并同时运......