gpt4 book ai didi

java - 通过套接字传输文件时文件损坏

转载 作者:行者123 更新时间:2023-11-30 04:07:30 25 4
gpt4 key购买 nike

我的 Java 客户端使用以下代码将文件发送到 C++ 服务器:

FileInputStream fileInputStream = new FileInputStream(path);
byte[] buffer = new byte[64*1024];
int bytesRead = 0;

while ( (bytesRead = fileInputStream.read(buffer)) != -1)
{
if (bytesRead > 0)
{
this.outToServer.write(buffer, 0, bytesRead);
}
}

我的 C++ 服务器使用此代码接收字节:

vector<char> buf5(file_length);
size_t read_bytes;
do
{
read_bytes = socket.read_some(boost::asio::buffer(buf5,file_length));
file_length -= read_bytes;
}
while(read_bytes != 0);
string file(buf5.begin(), buf5.end());

然后使用以下代码创建文件:

ofstream out_file( (some_path).c_str() );
out_file << file << endl;
out_file.close();

但是,在此过程中文件以某种方式损坏了。
在该过程结束时,两个文件(发送的文件和创建的文件)具有相同的大小。

我做错了什么?任何帮助将不胜感激!

编辑:尝试使用不同的代码接收文件,结果相同:

char buf[file_length];
size_t length = 0;
while( length < file_length )
{
length += socket.read_some(boost::asio::buffer(&buf[length], file_length - length), error);
}
string file(buf);

最佳答案

1) 是文本文件吗?
2) 如果不尝试在写入前以二进制方式打开文件,也不要使用<< 运算符,而是使用write 或put 方法

关于java - 通过套接字传输文件时文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22478224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com