气流->;写不';不要写最后一个包 我正在为C++中的类做超级简单的FTP服务器,客户端:从socket中的文件中读取。服务器:从套接字读写文件。我已经完成了所有的网络工作,但ofstream.write有一个非常奇怪的行为:它不会写入最后一个小于1024字节的数据包

气流->;写不';不要写最后一个包 我正在为C++中的类做超级简单的FTP服务器,客户端:从socket中的文件中读取。服务器:从套接字读写文件。我已经完成了所有的网络工作,但ofstream.write有一个非常奇怪的行为:它不会写入最后一个小于1024字节的数据包,c++,networking,server,client,C++,Networking,Server,Client,我尝试更改最后一个缓冲区大小,使其成为读取的字节数,我尝试查看错误标志,但没有出现错误,但没有写入任何内容,我尝试写入1024字节,我确实写入了,但结尾有垃圾(^@chars) private: 流出流和流出流; 对于(;;) { nread=recvfrom(sfd,buf,1024,0,(结构sockaddr*)和对等地址和对等地址); 输出流写入(buf,nread); 如果(nread

我尝试更改最后一个缓冲区大小,使其成为读取的字节数,我尝试查看错误标志,但没有出现错误,但没有写入任何内容,我尝试写入1024字节,我确实写入了,但结尾有垃圾(^@chars)

private:
流出流和流出流;
对于(;;)
{
nread=recvfrom(sfd,buf,1024,0,(结构sockaddr*)和对等地址和对等地址);
输出流写入(buf,nread);
如果(nread<1024)
打破
}

写入的文件应该包含1687字节,但只包含1024字节,如果我尝试
out\u stream.write(buf,1024)它包含2048个字节。我检查了程序是否在循环中运行了两次,因此条件不是问题。

您是否尝试了
out\u stream.flush()
for
循环之后?我问这个问题是因为从您公开的代码来看,不清楚
输出流是何时关闭或销毁的(这将自动刷新()仍在缓冲中的内容)。可能重复
private:
    ofstream &out_stream;

for (;;)
{
    nread = recvfrom(sfd, buf, 1024, 0, (struct sockaddr *)&peer_addr, &peer_addr_len);
    out_stream.write(buf, nread);
    if (nread < 1024)
        break;
}