多用户循环连接收发消息
服务端
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/3/2 15:12
# @Author : CaiChangEn
# @Software: PyCharm
# 循环连接(解决客户端在断开连接的时候,服务端也会close【主要原因是只有一个accept,当一个连接
# 进来的时候,代码就走到了Conn.recv(BUFFER_SIZE),那么此时如果客户端关闭了连接代码就直接走到下面
# 的TCP_Server.close(),所以在此处还要加上一层循环,用于循环接受连接】)
# 示例如下:
from socket import *
IP_PORT=('0.0.0.0',8080)
BACKLOG=5
BUFFER_SIZE=1024
TCP_Server=socket(AF_INET,SOCK_STREAM)
TCP_Server.bind(IP_PORT)
TCP_Server.listen(BACKLOG)
while True: # 这一层的循环是用于循环接收新的连接
Conn,Addr=TCP_Server.accept() # 现在只有一个accept说明执行接收一个conn连接
print('开始运行')
while True: # 这一层的循环是用于和一个人循环发送消息
try:
cli_msg=Conn.recv(BUFFER_SIZE)
print('客户端说: %s' %cli_msg.decode('utf-8'))
msg=input('请输入信息: ').encode('utf-8')
Conn.send(msg)
except Exception:
Conn.close()
break
TCP_Server.close()
客户端1
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/3/2 15:12
# @Author : CaiChangEn
# @Software: PyCharm
from socket import *
SERVER_IP_PORT=('127.0.0.1',8080)
BACKLOG=5
BUFFER_SIZE=1024
TCP_Server=socket(AF_INET,SOCK_STREAM)
TCP_Server.connect(SERVER_IP_PORT)
while True:
msg=input('请输入信息: ').strip()
if not msg:continue
TCP_Server.send(msg.encode('utf-8'))
ser_msg=TCP_Server.recv(BUFFER_SIZE)
print('服务端说: %s' %ser_msg.decode('utf-8'))
TCP_Server.close()
客户端2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/3/2 15:12
# @Author : CaiChangEn
# @Software: PyCharm
from socket import *
SERVER_IP_PORT=('127.0.0.1',8080)
BACKLOG=5
BUFFER_SIZE=1024
TCP_Server=socket(AF_INET,SOCK_STREAM)
TCP_Server.connect(SERVER_IP_PORT)
while True:
msg=input('请输入信息: ').strip()
if not msg:continue
TCP_Server.send(msg.encode('utf-8'))
ser_msg=TCP_Server.recv(BUFFER_SIZE)
print('服务端说: %s' %ser_msg.decode('utf-8'))
TCP_Server.close()
执行结果
# 客户端1
请输入信息: 客户端第一次发送消息
服务端说: 服务端回复第一次的消息
请输入信息: 客户端第二次发送消息
服务端说: 服务端回复第二次的消息
请输入信息: # 断开连接
# 客户端2
请输入信息: 客户端2第一次发送消息
服务端说: 服务端回复客户端2第一次的消息
# 服务端
开始运行
客户端说: 客户端第一次发送消息
请输入信息: 服务端回复第一次的消息
客户端说: 客户端第二次发送消息
请输入信息: 服务端回复第二次的消息
开始运行 # 断开连接之后服务器自动触发打印初始化信息
客户端说: 客户端2第一次发送消息
请输入信息: 服务端回复客户端2第一次的消息
# 可以看出,现在的情况即使可以端断开也不会影响服务端的运行
閱讀更多 動漫資深愛好者和IT 的文章