无法使用tcp套接字将大型文件从Java客户端发送到C++;服务器 我写的是一个C++程序,它通过java客户端从socket接收文件。 我试图发送的文件大小为510KB,但服务器只接收46KB,然后陷入“等待”更多字节的状态
这是服务器代码:(我试图一次接收510KB,但服务器卡住了,所以我也试图每次迭代接收64KB,服务器再次卡住) 注意:发送1KB文件时,一切正常 为什么会发生这种情况?我如何修复它?任何帮助都将不胜感激无法使用tcp套接字将大型文件从Java客户端发送到C++;服务器 我写的是一个C++程序,它通过java客户端从socket接收文件。 我试图发送的文件大小为510KB,但服务器只接收46KB,然后陷入“等待”更多字节的状态,java,c++,sockets,boost-asio,Java,C++,Sockets,Boost Asio,这是服务器代码:(我试图一次接收510KB,但服务器卡住了,所以我也试图每次迭代接收64KB,服务器再次卡住) 注意:发送1KB文件时,一切正常 为什么会发生这种情况?我如何修复它?任何帮助都将不胜感激 编辑:使用boost接收大数据的任何其他方式都将受到欢迎。如果读取代码卡住,则故障可能在发送代码中。张贴它。注意:发送文件不需要将整个文件读入内存。将文件加载到字符串中,然后使用writeBytes()发送字符串需要两个字符转换,这可能会损坏数据。字符串不是二进制数据的容器。 int bytes
编辑:使用boost接收大数据的任何其他方式都将受到欢迎。如果读取代码卡住,则故障可能在发送代码中。张贴它。注意:发送文件不需要将整个文件读入内存。将文件加载到字符串中,然后使用writeBytes()发送字符串需要两个字符转换,这可能会损坏数据。字符串不是二进制数据的容器。
int bytes_to_receive;
size_t length;
while(file_length > 0)
{
if(file_length >= 65536)
bytes_to_receive = 65536;
else
bytes_to_receive = file_length;
char buf5[bytes_to_receive];
length = 0;
while( length < bytes_to_receive )
length += socket.read_some(boost::asio::buffer(&buf5[length], bytes_to_receive - length), error);
string temp(buf5);
file_parts.push_back(temp);
file_length -= bytes_to_receive;
}
string file("");
vector<string>::const_iterator it;
for(it = file_parts.begin(); it != file_parts.end(); ++it)
{
file += *it;
}
writeBytes