Python实现TCP服务端的并发
Posted 思江
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
以上是关于Python实现TCP服务端的并发的主要内容,如果未能解决你的问题,请参考以下文章