实名感谢博主 :Python3进阶--Socket编程、多线程(创建方式、线程通信、线程锁、线程池)_python socket 多线程_鸢尾の的博客-CSDN博客
服务端:
import socket
import threading
def deal(conn, client):
print(f'新线程开始处理客户端 {client} 的请求数据')
while True:
data = conn.recv(1024).decode('utf-8') # 接收客户端数据并且解码, 一次获取 1024b数据(1k)
print('接收到客户端发送的信息:%s' % data)
if 'exit' == data:
print('客户端发送完毕,已断开连接')
break
re_data = data.upper()
conn.send(re_data.encode('UTF-8'))
conn.close()
# 类型:socket.AF_INET 可以理解为 IPV4
# 协议:socket.SOCK_STREAM
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 8000)) # (client客户端ip, 端口)
server.listen() # 监听
while True:
sock, addr = server.accept() # 获得一个客户端的连接(阻塞式,只有客户端连接后,下面才执行)
xd = threading.Thread(target=deal, args=(sock, addr))
xd.start() # 启动一个线程
客户端:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
while True:
re_data = input()
if len(re_data) == 0:
print("Input_again")
continue
client.send(re_data.encode("utf-8"))
if 'exit' == re_data:
print('客户端退出..')
break
data = client.recv(1024)
res = data.decode('utf-8')
print(res)
client.close()
问题:
正常操作是客户端输入内容,回车发送内容。
当客户端没有任何输入直接回车时,客户端会卡死,服务端有一定几率卡死
原因:不明
对策:判断字符串是否为空,如果为空不发送信息。