鱼C论坛

 找回密码
 立即注册
查看: 2145|回复: 3

求教为什么python传输二进制文件之后文件内容会改变(且大小变小)

[复制链接]
发表于 2020-7-18 23:35:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
服务器代码:
import sys
import socket

def get_filecontent(file_name):

     '''方法的作用是读取文件内容给客户端'''
     try:
        with open(file_name,'rb') as f:
            content = f.read()
            return content
     except  FileNotFoundError :
         print("没有找到文件%s"%file_name)
def main():
    # 1.创建socket
    tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 2.绑定服务器端口
    address = ("",8094)
    tcp_socket.bind(address)
    #3.将主动套接字改成被动模式
    tcp_socket.listen(5)
    while True:
        # 4.等待对方客户端连接
        client_socket ,client_addr = tcp_socket.accept()
        # 5.接受对方客户端的数据
        recv_data = client_socket.recv(1000000) #这个表示单次连接传输文件大小,用户根据实际自定
        file_name = recv_data.decode("utf-8")
        print("对方请求下载的文件名为:%s"%file_name)
        #调用上面的函数,实现读取文件内容
        file_content = get_filecontent(file_name)
        print('发送成功')
        if file_content :
        client_socket.send(file_content)
        #  因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
        #关闭这个客户端套接字
        client_socket.close()

    #关闭监听套接字
    tcp_socket.close()

if __name__ == '__main__':
    main()
客户端代码:
import socket
def main():
    #1.创建客户端套接字
    tcp_client_socket =socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    #2.与服务器建立连接
    dest_server = ("127.0.0.1",8094)
    tcp_client_socket.connect(dest_server)

    # 3.数据发送,请求下载
    send_Msg = input("请输入需要下载的文件名称:")

    tcp_client_socket.send(send_Msg.encode("utf-8"))

    #4.数据接收 ,写入本地
    recv_Msg =  tcp_client_socket.recv(100000000)  #因为这里是接收文件,所以将单此传输文件大小要设置的大一些。
   # print('接收到的数据为:', recv_Msg.decode('utf-8'))
    if recv_Msg:
        with open('F:\\python网络\\111',"wb") as f : #注意,这里必须要是wb写入模式,否则乱码,因为打开是rb模式。
            f.write(recv_Msg)
        print("下载成功,请查看!")
    else :
        print("没有下载成功")
    #5.关闭套接字
    tcp_client_socket.close()
if __name__ == '__main__':
    main()
    原来170kb的二进制文件传输后只有128kb
     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-19 00:21:46 | 显示全部楼层
应该是内容不一致吧,检查检查看看?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-19 10:38:06 | 显示全部楼层
Twilight6 发表于 2020-7-19 00:21
应该是内容不一致吧,检查检查看看?

同一个文件,经过这个传输后读取出来的数据就不一样了,不知道是不是中间有一些数据损失
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-19 10:42:32 | 显示全部楼层
浓茶淡品 发表于 2020-7-19 10:38
同一个文件,经过这个传输后读取出来的数据就不一样了,不知道是不是中间有一些数据损失

可能是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 23:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表