浓茶淡品 发表于 2020-7-18 23:35:22

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

服务器代码:
import sys
import socket

def get_filecontent(file_name):

   '''方法的作用是读取文件内容给客户端'''
   try:
      with open(file_name,'rb') as f:
            content = f.read()
            return content
   exceptFileNotFoundError :
         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
   

Twilight6 发表于 2020-7-19 00:21:46

应该是内容不一致吧,检查检查看看?

浓茶淡品 发表于 2020-7-19 10:38:06

Twilight6 发表于 2020-7-19 00:21
应该是内容不一致吧,检查检查看看?

同一个文件,经过这个传输后读取出来的数据就不一样了,不知道是不是中间有一些数据损失

Twilight6 发表于 2020-7-19 10:42:32

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

可能是
页: [1]
查看完整版本: 求教为什么python传输二进制文件之后文件内容会改变(且大小变小)