我正在使用C ++编写CHAT程序。并停留在发送/接收文件的问题上。我的服务器端是在Flask App的后台运行的Python,它接受TCP连接并将传入/传出的数据转发到聊天客户端。它没有问题,效果很好。我的问题是客户收到的。我添加了发送和接收文件的功能。虽然发送正常,没有错误(经过测试,可以正常工作)。在客户端接收消息使我头疼。
我正在使用以下方法接收文件,无论它是二进制文件还是文本文件。
// filebuf is defined as
// char filebuf[BUFFER];
// BUFFER is 1024.
void CHAT::recvFile()
{
int fsize;
std::ofstream recvfile(filename, std::ios::app, std::ios::binary);
while ((fsize = recv(sockfd, filebuf, sizeof(filebuf), 0)) > 0)
{
recvfile.write(filebuf, sizeof(filebuf));
}
recvfile.close();
respond("Received file.\n");
}
这有效,但是数据没有完全写入文件中。例如;如果我发送144 kb的文件,它将另存为142 kb。程序就在那里停止。
最终问题;如何使用C ++接收大/小文件?
编辑:@AlgirdasPreidžius响应后,我重新测试了它。这是发送前后文件的一些屏幕截图。
这是在发送之前。
答案 0 :(得分:0)
有3种方法可以处理这种情况。
RecyclerView
结合使用非阻塞IO 这是解析传入消息以寻找行终止符的快速示例。 例如:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/contact_recycler"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/item_contact"
tools:layout_editor_absoluteX="0dp"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/permission_layout"/>
请注意,这是一个未经测试的快速示例,向您显示了如何解析传入的消息。