1

我正在通过以二进制格式打开 PDF 文件来阅读它。我必须通过套接字将每个字节发送到服务器。我为此目的使用winsock。以下是我遇到问题的代码:

int Div = (int)file_size / 1024;
int Mod = (int)file_size % 1024;
for (int i=0; i<Div; i++)
{
    file_block = new char[1024];
    myfile.seekg(i*1024);
    myfile.get(file_block,1024);
    send(theSocket,file_block,1024,0);
}
if (Mod != 0)
{
    file_block = new char[Mod];
    myfile.seekg(Div*1024);
    myfile.get(file_block,Mod);
    send(theSocket,file_block,Mod,0);
}

当我阅读 PDF 文件时,我的程序在读取前 4 个字节后卡住了,即%PDF-1.5. 在 Hex Editor 中查看该文件会发现其中x0D x0ACarriage Return & Line Feed.

这是我的程序卡住的原因吗?我怎么解决这个问题 ?

4

1 回答 1

3

如果你看到例如这个参考,你会看到get

3) 同get(s, count, widen('\n')),即最多读取count-1个字符,并将它们存储到s指向的字符串中,直到找到'\n'。

所以一开始它只会读到换行符。它只会读取count - 1字符,在你的情况下是 1023 而不是你期望的 1024。

您应该read改用:

myfile.read(file_block, 1024);

您可能还应该检查错误,并且仅在没有错误时发送:

if (myfile.read(file_block, 1024))
    send(theSocket, file_block, myfile.gcount(), 0);
else
{
    // Error, handle it somehow
}
于 2013-05-26T15:19:51.530 回答