ファイル転送についていろいろ考えてみるがどうしていいのかわからないまま
今日まで画面をにらんでいました。
で、ファイルを細かく分割、送受信するプログラムを考えようとはするのですが
なぜ、大容量は送れないのかがわからないので、どのくらいのサイズまで絞ればよいのかがわからない。
だから、アイデアも出てきそうで出てこない。
そこで、原因を今一度調べてみた。
理屈はよくわかりませんが、どうやらMTUが、どうたら、こうたら…?で
TCPのヘッダがこうだ!あ~だ!という感じで1460バイトが一つの境らしい。
で、ルーターやLANカード(ボード)がどうとかでそれ以下もあれば、それ以上もあるとかなんとか??
で、ようするに1000バイト程度で分割すればいけるような感じでした。
で、自前で分割して送受信するプログラムを考えていましたが、作っているうちに
TCPには、送りきれなかったら、分割してそれを結合してまとめるプロトコルがあるのに
なぜ、自分でそれを作らなければいけないのか?不思議な衝動になりました。
自分で分割、結合のプログラムをつくるのなら、UDPでもOKなわけで、TCPを利用する意味が薄くなります。
なので、ここはTCPの持ち味を生かすプログラムを考えることにします。
そう考えるようになったら、苦労はしましたが、すす~っと前に進みました。
もちろん、手こずった部分は多々ありますがなんとかできました。
これで、どんなファイルでどんなに容量があっても送受信できるはず?
のプログラムができました。
で、早速、1MBのマップデータを送信・・・うまくいきました^^
非常にうれしい瞬間でした。
これまで、かなり難しい難題がありましたが、今回のファイル送信もそのひとつで
正直、自分の知識では到底できるレベルではなかったと思います。
たまたま、CreateFileが目にとまり、実現できました。
プログラムに詳しい知人がいるわけでもなく、先生なんてもちろんいません。
こんなAPIがあることをしらなければ、今回のファイル転送はうまくいかなかったと思います。
このAPIの使い方でお世話になったサイトです。
Programing PlaceのWin32API(C言語)編 第50章 ファイルハンドルを使うでした。
どうも、ありがとうございました。
で、次はエラーログなどの記述を実装していこうと思っています。
こちらも、実は、のばしのばしになってました^^;
2012/06/11
コメントはまだありません。