客户端:
import os
import cv2
import json
import socket
import threading
#读取文件的最大数
max_len=1024
#端口号和IP地址
remote_PORT=5555
remote_IP='127.0.0.1'
remote_addr=(remote_IP,remote_PORT)
#绑定端口号和IP地址
socket_Client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket_Client.connect(remote_addr)
defClient_Send_File(socket_Client,filename):""":param socket: 客户端套接字:param filename: 要传输的文件:param root:主窗口:return:"""
#首先将消息头发送至服务端
file,class_file=os.path.splitext(filename)
#获取文件大小#file_size=os.path.getsize(filename)
file_Size=os.stat(filename).st_size
msg_header={'filename':file,'msg_type':class_file,'msg_len':file_Size}
msg_header_bytes=bytes(json.dumps(msg_header),encoding='utf-8')
#当消息头的长度不满1024时,使用空格填充
msg_header_bytes+=b''*(max_len-len(msg_header_bytes))
socket_Client.send(msg_header_bytes)
file_len=0
recv_count=0
#发送的文件头大小print('msg_header_bytes: {}'.format(len(msg_header_bytes)))
#发送的文件大小print('file_size: {}'.format(file_Size))
withopen(filename,'rb') as fp:while file_len!=file_Size:
message=fp.read(max_len)
socket_Client.send(message)
file_len+=len(message)print(file_len)
recv_count+=1print('发送次数: {}'.format(recv_count))
socket_Client.close()print('发送完成...')if __name__=='__main__':print('Pycharm')
#第二个参数为图片或者其他文件的路径Client_Send_File(socket_Client,'hometown.jpg')
服务端:
import cv2
import os
import json
import socket
import threading
#读取文件的最大数
max_len=1024
#端口号和IP地址
remote_PORT=5555
remote_IP='127.0.0.1'
remote_addr=(remote_IP,remote_PORT)
#绑定IP地址和端口号PORT
socket_Server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket_Server.bind(remote_addr)
#监听
socket_Server.listen()print('正在监听来自客户端的消息......')
defServer_Recv_File(socket):""":param socket: 服务端套接字:param root: 主窗口:return:"""
#获取客户端发送的消息头
msg_header=socket.recv(max_len)
header=json.loads(msg_header.decode('utf-8'))
#输出客户端发送的消息头信息print(header)
#保存接收文件的地方
curr_path=os.getcwd()
filename=curr_path+'\\recv_'+header['filename']+header['msg_type']
get_file_Size=header['msg_len']
file_size=0
#输出文件名和文件大小print('文件名: {}'.format(filename))print('file_size: {}'.format(get_file_Size))
recv_count=0
#如果文件不存在则创建if os.path.exists(filename)==False:
withopen(filename,'wb') as fp:while file_size!=get_file_Size:
message=socket.recv(max_len)
fp.write(message)
file_size+=len(message)print(file_size)
recv_count+=1else:
withopen(filename,'wb') as fp:while file_size!= get_file_Size:
message= socket.recv(max_len)
fp.write(message)
file_size+=len(message)print(file_size)
recv_count+=1print('接收次数: {}'.format(recv_count))
socket.close()print('接收完成...')if __name__=='__main__':print('Pycharm')
new_socket,addr=socket_Server.accept()Server_Recv_File(new_socket)