1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python中使用socket编程实现图片或者其他文件的传输

python中使用socket编程实现图片或者其他文件的传输

时间:2023-06-19 03:02:05

相关推荐

python中使用socket编程实现图片或者其他文件的传输

客户端:

import osimport cv2import jsonimport socketimport threading#读取文件的最大数max_len=1024#端口号和IP地址remote_PORT=5555remote_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)def Client_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_sizemsg_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=0recv_count=0#发送的文件头大小print('msg_header_bytes: {}'.format(len(msg_header_bytes)))#发送的文件大小print('file_size: {}'.format(file_Size))with open(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 cv2import osimport jsonimport socketimport threading#读取文件的最大数max_len=1024#端口号和IP地址remote_PORT=5555remote_IP='127.0.0.1'remote_addr=(remote_IP,remote_PORT)#绑定IP地址和端口号PORTsocket_Server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)socket_Server.bind(remote_addr)#监听socket_Server.listen()print('正在监听来自客户端的消息......')def Server_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:with open(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:with open(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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。