4、socket循环连接收发消息

多用户循环连接收发消息

服务端

#!/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第一次的消息

# 可以看出,现在的情况即使可以端断开也不会影响服务端的运行


分享到:


相關文章: