服務(wù)端.py
from socket import *
from fileManager import*
from threading import*
class ServerThread(Thread):
"""創(chuàng)建子線程"""
def __init__(self, connection, address):
super().__init__()
self.connection = connection
self.address = address
def run(self):
picture_nums = Number()
# 讓通信一直進(jìn)行
while True:
# 接收信息
re_message = self.connection.recv(1024).decode(encoding='utf-8')
if re_message == '1':
# print('發(fā)送文字')
message = input('請(qǐng)輸入:')
self.connection.send(message.encode())
print('文字發(fā)送成功!')
elif re_message == '2':
# 發(fā)送圖片
picture_message = binary_read('./server_files./圖片.jpg')
self.connection.send(picture_message)
print('圖片發(fā)送成功菊卷!')
elif re_message == '3':
# 發(fā)送視頻
video_message = binary_read('./server_files/視頻.mp4')
self.connection.send(video_message)
print('視頻發(fā)送成功!')
elif re_message == '4':
# 接收?qǐng)D片
picture_data = bytes()
while True:
picture_message = self.connection.recv(1024)
if len(picture_message) < 1024:
picture_data += picture_message
binary_write('./server_files/圖片%d.jpg' % picture_nums.create_num(), picture_data)
break
picture_data += picture_message
print('圖片接收成功!')
elif re_message == '5':
self.connection.close()
print('%s已離開...' % self.address[0])
break
else:
continue
def create_server():
server = socket()
server.bind(('10.7.160.92', 1234))
server.listen(512)
print('開始監(jiān)聽...')
while True:
connection, address = server.accept()
print('歡迎%s...' % address[0])
t1 = ServerThread(connection, address)
t1.start()
if __name__ == '__main__':
create_server()
客戶端.py
from socket import *
from fileManager import *
def clients():
client = socket()
client.connect(('10.7.160.92', 1234))
text_nums = Number()
picture_nums = Number()
video_nums = Number()
while True:
print('1.接收文字 2.接收?qǐng)D片 3.接收視頻 4.發(fā)送圖片 5.退出')
message = input('請(qǐng)選擇:')
client.send(message.encode())
if message == '1':
# 接收文字
all_message = client.recv(1024).decode(encoding='utf-8')
text_write('./client_files/聊天記錄%d.txt' % text_nums.create_num(), all_message)
print('文字接收成功罚缕!')
elif message == '2':
# 接收?qǐng)D片
picture_data = bytes()
while True:
picture_message = client.recv(1024)
if len(picture_message) < 1024:
picture_data += picture_message
binary_write('./client_files/圖片%d.jpg' % picture_nums.create_num(), picture_data)
print('圖片接收成功趁猴!')
break
picture_data += picture_message
elif message == '3':
# 接收視頻
all_data = bytes()
while True:
data1 = client.recv(1024)
if len(data1) < 1024:
all_data += data1
all_data = binary_write('./client_files/視頻%d.mp4' % video_nums.create_num(), all_data)
print('視頻接收成功学密!')
break
all_data += data1
elif message == '4':
# 發(fā)送圖片
picture_message = binary_read('./server_files./圖片.jpg')
client.send(picture_message)
print('圖片發(fā)送成功!')
elif message == '5':
break
else:
print('輸入錯(cuò)誤蚓让!')
if __name__ == '__main__':
clients()
fileManager.py
class Number:
"""產(chǎn)生序號(hào)"""
def __init__(self):
self._nums = 0
@property
def nums(self):
return self._nums
def create_num(self):
self._nums += 1
return self._nums
def text_write(file_path: str, all_message: str):
"""
寫入文本文件
:param file_path:
:return: None
"""
if not all_message:
return
with open(file_path, 'a', encoding='utf-8') as f:
f.write(all_message+'\n')
def binary_read(file_path: str):
"""
獲得二進(jìn)制文件
:param file_path:
:return:
"""
try:
with open(file_path, 'rb') as f:
return f.read()
except:
return None
def binary_write(file_path: str, all_message: bytes):
"""
寫入二進(jìn)制文件
:param file_path:
:param all_message:
:return:
"""
if not all_message:
return
with open(file_path, 'wb') as f:
f.write(all_message)