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()

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM