求教为什么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
应该是内容不一致吧,检查检查看看?
同一个文件,经过这个传输后读取出来的数据就不一样了,不知道是不是中间有一些数据损失 浓茶淡品 发表于 2020-7-19 10:38
同一个文件,经过这个传输后读取出来的数据就不一样了,不知道是不是中间有一些数据损失
可能是
页:
[1]