python socket 文件传输

一. server
#-*- coding:utf-8 -*-

import os,socket
import hashlib
#创建serversocket对象
server=socket.socket()
server_name=input('请输入服务器地址(ip地址)').strip()
#port_name=int(input('请输入服务器端口,通用端口为8888').strip())

#绑定服务器地址和端口
server.bind((server_name,8888))
#监听
server.listen(5)

while True:
    #获取client对象 connIP地址
    print('等待接入。。。。')
    conn,addr=server.accept()
    print(str(addr),'已经连接。。。')

    while True:
    #接收client端信息
        data=conn.recv(1024)
        if not data:
            print('客户端没有数据传过来')
            break

        cmd,filename=data.decode().split()#用空格区分进行分割cmdfilename
        print(cmd,filename)
        #os.chdir(r'c:\py') #确认文件目录
    #判断文件及文件夹是否存在
        if os.path.isfile(filename):
            #存在,就打开文件,用byte流读取
            get_file=open(filename,'rb')
            #获取文件的大小
            file_size=os.stat(filename).st_size
            #先发送文件大小给client
            conn.send(str(file_size).encode('utf-8'))

            #获取客户端确认
            #res=conn.recv(10)
            #获取md5加密对象
            m = hashlib.md5()
            #发送文件
            for line in get_file:
                #m.update(line)
                conn.send(line)
           #print('md5:',m.hexdigest())
            get_file.close()

        else:
            conn.send('0'.encode('utf-8'))

        print('send done')


server.close()


二.client
 
#-*- coding:utf-8 -*-

import os,socket
import hashlib
#创建serversocket对象
client=socket.socket()
server_name=input('请输入连接服务器地址(ip地址)').strip()
#port_name=int(input('请输入服务器端口,通用端口为8888').strip())

#连接服务器
client.connect((server_name,8888))

while True:
    #输入指令
    cmd_str=input('请输入get filename,输入Q退出:').strip().encode('utf-8')
    if not cmd_str:
        continue
    elif cmd_str==b'Q':
        print('退出')
        break
    else:
        #发送指令
        client.send(cmd_str)
    #接收服务器的指令信息
    file_size = client.recv(1024).decode()
    if file_size =='0' :
        print('没有这个文件或文件为空!')
        continue
    # else:
    #     client.send(b'start') #client端确认允许传文件

    print('文件大小:'+file_size)

    file_name= cmd_str.split()[1]
    print(file_name)
    os.chdir(r'd:\py')
    f=open(file_name,'wb')
    res_size = 0
    while res_size<int(file_size):
        data=client.recv(1024)
        res_size+=len(data)
        f.write(data)
        print(file_size,res_size)
    else:
        print('文件接收完成')
        f.close()

client.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值