Python实现TCP服务端的并发

服务端的三个条件:
1、有固定的IP和PORT。
2、24小时不间断提供服务。
3、能够支持并发。

服务端
复制代码
# encoding=utf-8
# auther:lsj
# 服务端

from multiprocessing import Process
from threading import Thread
import socket

"""
服务端的三个条件:
    1、有固定的IP和PORT。
    2、24小时不间断提供服务。
    3、能够支持并发。
"""
server = socket.socket()  # 括号内不加参数默认就是TCP协议
server.bind(('127.0.0.1',8080))
server.listen(5)

# 链接循环
while True:
    conn, addr = server.accept()
    # 通讯循环
    while True:
        try:
            data = conn.recv(1024)
            # 针对mac linux客户端断开链接后
            if len(data) == 0:break
            print(data.decode('utf8'))
            conn.send(data.upper())
        except ConnectionResetError as e:
            print(e)
            break
    conn.close()
复制代码

客户端

复制代码
# encoding=utf-8
# auther:lsj
# 客户端1

import socket
client = socket.socket()
client.connect(('127.0.0.1',8080))

while True:
    client.send(b'hello world')
    data = client.recv(1024)
    print(data.decode('utf-8'))
复制代码

第一步:启动服务端。

第二步:启动一个客户端,看效果,服务端和客户端一直运行。

第三步:再启动一个客户端,看到该客户端无任何反应。

  针对上面第三步出现的问题对服务端进行改进。

复制代码
# encoding=utf-8
# auther:lsj
# 服务端

from multiprocessing import Process
from threading import Thread
import socket

"""
服务端的三个条件:
    1、有固定的IP和PORT。
    2、24小时不间断提供服务。
    3、能够支持并发。
"""
server = socket.socket()  # 括号内不加参数默认就是TCP协议
server.bind(('127.0.0.1',8080))
server.listen(5)

# 将服务的代码单独封装成一个函数
def talk(conn):
    # 通讯循环
    while True:
        try:
            data = conn.recv(1024)
            # 针对mac linux客户端断开链接后
            if len(data) == 0:break
            print(data.decode('utf8'))
            conn.send(data.upper())
        except ConnectionResetError as e:
            print(e)
            break
    conn.close()

# 链接循环
while True:
    conn, addr = server.accept()  # 接客
    # t = Thread(target=talk,args=(conn,)) # 叫其他人来服务客户(线程版)
    t = Process(target=talk,args=(conn,))  # 叫其他人来服务客户(线程版)
    t.start()
复制代码

 

posted @   思江  阅读(1381)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
历史上的今天:
2019-06-24 Selenium3+python自动化006+自动化测试概述
2019-06-24 Selenium3+python自动化006-环境搭建
2019-06-24 Selenium3+python自动化012+日志logging基本用法、高级用法
2019-06-24 python接口自动化4-绕过验证码登录(cookie)
2019-06-24 python接口自动化3-自动发帖(session)
2019-06-24 python接口自动化2-发送post请求
2019-06-24 python接口自动化1-发送get请求
点击右上角即可分享
微信分享提示