基本的に、パケット構造に含まれる 20,480 バイトのバッファーを使用しています。構造は次のとおりです。
struct PACKET
{
    DWORD Header;
    char data[20480];
    bool eof;
};
私がやっていることは、一度に 20,480 バイトのファイルを読み取り、すべてのファイルが送信されるまで送信することです。これを 3MB のファイルでテストしており、およそ 150 ラウンドが送信されます。
コードは次のとおりです。
PACKET sc;
sc.Header = 0xB;
ifstream file("test.pdf", ios::ate | ios::binary | ios::in);
    DWORD fileSize = file.tellg();
    file.seekg(0, ios::beg)
    int counter = 20480;
    int rounds = fileSize / 20480 + 1;
そして送信ループ:
while (rounds != 0)
{
    sc.eof = false;
    file.read(sc.data, sizeof(sc.data));
    send(Slick.client, (char*)&sc, sizeof(sc), 0);
    file.seekg(counter + 1);
    counter = counter + 20480;
    rounds--;
    Sleep(1);
       if (rounds == 0) sc.eof = true;
    cout << "Left to send: " << rounds << endl;
}
file.close();
cout << "All data was sent!" << endl;
反対側で非同期ソケットを使用しているため、問題は、140 パケット、130、147、148 などを受信する場合があり、ファイルが常に破損することです。私は何を間違っていますか?
反対側は次のとおりです。
case PACKET_FILE:
                    {
                        if (isOpen == false)
                        {
                            isOpen = true;
                            file.open("tester.pdf", ios::binary | ios::out | ios::app);
                            file.write(pack.data, sizeof(pack.data));
                        }
                        else
                        {
                            if (pack.eof == true)
                            {
                                file.write(pack.data, sizeof(pack.data));
                                file.close();
                                MessageBox(NULL, "File Received", "LOL", MB_OK);
                                break;
                            }
                                file.write(pack.data, sizeof(pack.data));
                        }
                        countz++;
                        char bue[10];
                        itoa(countz, bue, 10);
                        SendMessage(hlabelPackets, WM_SETTEXT, NULL, (LPARAM)(bue));
                        break;
                    }
助けてください、意味がありません...