Winsock を使用してファイル ダウンローダを作成しようとしましたが、インターネット接続が遅いと、クライアントがサーバーから送信されたデータと一緒に不要なデータを受信することに気付きました。
そこで、簡単なテストを行いました:
サーバーから 1 から 30000 までの数字を送信しています:
char* buf = (char*)malloc(BUFLEN);
for( int i = 0;i < 30000;++i ){
ZeroMemory(buf, BUFLEN);
itoa(i+1, buf, 10);
send(current_client, buf, BUFLEN, 0);
}
free(buf);
クライアントはそれらを受け取り、保存します。
char *buf = (char*)malloc(DEFAULT_BUFLEN);
ofstream out;
out.open(filename, ios::binary);
for( int i = 0;i < 30000;++i ){
ZeroMemory(buf, DEFAULT_BUFLEN);
recv(ConnectSocket, buf, DEFAULT_BUFLEN, 0);
out.write(buf, DEFAULT_BUFLEN);
out << endl;
}
out.close();
free(buf);
そして、ファイルには次のようなものが含まれていると予想します:
1
2
3
4
...
30000
しかし、代わりに、'/0' を含む余分なパケットが送信され、ファイルは次のようになります:
1
2
3
4
5
6
...
2600
「/0」パケットをスキップしようとすると、サーバーからのデータも次のようにスキップされます:
1
2
3
4
5
6
9 <- 7 と 8 がありませ
ん ...
2600
何が間違っていますか? ?