客戶(hù)端(可寫(xiě)多個(gè)客戶(hù)端)
from socket import *
from threading import *
import os
from json import *
class DealClientThread(Thread):
def __init__(self, connection: socket, address):
super().__init__()
self.connection = connection
self.address = address
def run(self) -> None:
while True:
re_data = self.connection.recv(1024)
message = re_data.decode('utf-8')
if message == 'text':
self.connection.send('我是文字信息!'.encode())
elif message == 'image':
all_files = os.listdir('./images')
# 發(fā)送所有的圖片名字
self.connection.send(dumps(all_files).encode())
# 接收?qǐng)D片名
image_name = self.connection.recv(1024)
# 判斷圖片是否存在
image_path = './images/'+image_name.decode(encoding='utf-8')
if os.path.exists(image_path):
print('文件存在!')
self.connection.send('exists'.encode())
with open(image_path, 'rb') as f:
self.connection.send(f.read())
else:
print('文件不存在!')
self.connection.send('notExists'.encode())
else:
self.connection.close()
break
def creatServer():
server = socket()
server.bind(('10.7.181.109', 9997))
server.listen(512)
while True:
print('開(kāi)始監(jiān)聽(tīng)....')
connection, adderss = server.accept()
t = DealClientThread(connection, adderss)
t.start()
if __name__ == '__main__':
creatServer()
服務(wù)器
from socket import socket
from json import *
client = socket()
client.connect(('10.7.181.109', 9997))
while True:
print('1.獲取文字信息\n2.獲取圖片信息\n3.退出')
value = input('請(qǐng)選擇(1-3):')
if value == '1':
client.send('text'.encode())
# 接收服務(wù)器返回的文字信息
message_data = client.recv(1024)
print(message_data.decode(encoding='utf-8'))
elif value == '2':
client.send('image'.encode())
# 接收服務(wù)返回的所有的圖片信息
image_message = client.recv(1024)
all_files = loads(image_message.decode(encoding='utf-8'))
for index in range(len(all_files)):
print('%d: %s' % (index, all_files[index]))
# 選擇需要的圖片
num = int(input('請(qǐng)選擇需要的圖片名(0-%d):' % len(all_files)))
# 發(fā)送圖片名
client.send(all_files[num].encode())
# 接收?qǐng)D片
is_exsits = (client.recv(1024)).decode(encoding='utf-8')
if is_exsits == 'exists':
image_data = bytes() # 創(chuàng)建空的二進(jìn)制
while True:
small_image_data = client.recv(1024)
image_data += small_image_data
if len(small_image_data) < 1024:
break
with open('./client/'+all_files[num], 'wb') as f:
f.write(image_data)
print('圖片下載完成!')
else:
print('404扑毡,圖片不存在柳沙!')
else:
client.send('exit'.encode())
client.close()
break