python socket 传输文件出错

在使用socket从手机向电脑传输文件时,传输的字节开头总是b'\x00\x00\x00\x00'.

版本:python 3.9.6

电脑端代码(win11):

import socket
import struct
 
 #获取本机ip地址
ip_s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_s.connect(("8.8.8.8",80))
host=ip_s.getsockname()[0]  

#服务器端开始监听
port=8080
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket类型,网络通信,TCP
sk.bind((host,port)) #绑定IP和接口
sk.listen(5) #开始监听        
        
while(True):
    conn, address = sk.accept()
    print(address)    
    booklist=1 #目录文件传输判断
    updatename=1 #更新文件判断    
    #传输目录文件
    while(booklist):
        if(not conn):            
            break        
        fileinfo_size=struct.calcsize('128sl') # 定义文件信息。128s表示文件名为128bytes长,l表示一个int或log文件类型,在此为文件大小
        buf = conn.recv(fileinfo_size)#接收文件头部信息        
        if(buf):                       
            filename,filesize =struct.unpack('128sl',buf)
            filename_recv = filename.strip(b'\00') 
            filename_recv=filename_recv.decode("utf-8")                             
            recv_size=0
            fp=open('./'+str(filename_recv),"wb")            
            while(not recv_size==filesize):
                if((filesize-recv_size)>1024):
                    data=conn.recv(1024)                    
                    recv_size+=len(data)
                    print("1024",data)
                else:
                    data=conn.recv(filesize-recv_size)
                    recv_size+=len(data)  
                    print("buzu",data)             
                fp.write(data)                                
            fp.close()
            print("目录文件接收完成")
        booklist=0

手机端代码(安卓)

import socket
import os
import struct

host="192.168.1.253"
port=8080
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect((host,port))

path_Books="/storage/emulated/0/Books"
path_hide="/storage/emulated/0/Python/hide"
path_Read="/storage/emulated/0/Read"

booklist=[]

for i in os.listdir(path_Books):
    booklist.append(i)
for i in os.listdir(path_hide):
    booklist.append(i) 
for root,dir,files in os.walk(path_Read):
    for i in files:
        booklist.append(os.path.join(root,i)) 
    
f=open("/storage/emulated/0/Python/Phone.txt","w",encoding="utf-8")

for i in booklist:
    f.write(i)
    f.write("\n")
f.close()

while(True):
    filepath="/storage/emulated/0/Python/Phone.txt"    
    fileinfo_size=struct.calcsize('128sl')
    fhead=struct.pack('128sl',os.path.basename(filepath).encode('utf-8'),os.stat(filepath).st_size)
    s.send(fhead)
    fp=open(filepath,"rb")
    while(True):
        data=fp.read(1024)
        if(not data):
            print("目录文件发送完成")
            break
        sk.send(data)

传输显示:
1024 b'\x00\x00\x00\x00\xa1\xbe\xc1\xb7\xca\xd6\xa1\xbf\xd7\xee\xba\xf3\xb5\xc4\xca\xc2\xbc\xfe by

你这需要解码成utf-8吧,原始显示本来就是字节码

我手机上显示发送的是\xa1\xbe\xc1\xb7\xca\xd6\xa1\xbf\xd7\xee\xba\xf3\xb5\xc4\xca\xc2\xbc\xfe by
没有开头的b'\x00\x00\x00\x00.
而且,最后接收时会少最后的四个字节。但长度还一致。
而且我换成各种不同形式的文件都是这样
我把代码复制到电脑上,用电脑和电脑之间互传,就没有开头多出来的b'\x00\x00\x00\x00\