- - PR -
SocketによるTCP/IP通信について(VC++6.0使用)
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-28 14:12
データー送出の為に下記の如くsend命令を連続して2個記述します。
send("123456",6,0); //第1番目の送出命令 send("789ABC",6,0); //第2番目の送出命令 この場合の、データーリンク層のパケットについてコメント(お教え)ください。 Q1:2パケットして送信されるのでしょうか、気を利かせて"123456789ABC"とデータを結合して、1パケットとして送信されるのでしょうか? Q2:上記に於いて、設定により、結合する/しないの指定が出来るのでしょうか? 以上、宜しくお願いします。 | ||||||||
|
投稿日時: 2004-04-29 07:52
UDPの話ですか?それともTCPの話ですか?
とりあえずTCPの話として・・・・。 A1: 2パケットとして送信されることもあります。1パケットとして送信されることもあります。"123456789"と"ABC"の2パケットに分かれて送信されることもあり得ます。3パケットとして送信されることもあり得ます。 A2: 出来ません。 要は以下のようなルールになります(厳密にはちょっと違うかもしれないけど)。 1.可能な限りひとつのパケットに収めようとします。 2.ひとつのパケットに収められるか否かは、MTUによって決まります。MTUサイズを超えた場合は複数のパケットに分割されます。 3.可能な限りひとつのパケットに収めようとしますが、一定時間内に続きのデータが渡されない場合には手持ちのデータだけを送信します。 | ||||||||
|
投稿日時: 2004-04-29 15:42
TCPに関する質問でした。適切な回答有難うございます。
若し、宜しければ下記について教えて(コメント)ください。 Q1:お教え頂いた御回答の内容に関して、記述した資料はありますか(不正確でも解かり易い)? 特に、2ms毎に発生する20バイトのデータはその単位でpackingされるでしょうか? 20バイトx5程度でpackingされるのでしょうか? ServerとClientが1対1で対話し、その他のクライアント(約1から10人)はその結果を専用Viewerで観覧するシステムを考えています(例えば、Hangameの将棋に似ていますが、ViewerはIEではありません)。 Q2:この様なシステムはすべてSocketを使用して、全てプログラムを組む必要がありますか。 Q3:上記において、Clientの管理等のIE部分については、プログラムを購入出来るでしょうか? お手数ですが、宜しくお願いします。 | ||||||||
|
投稿日時: 2004-04-29 17:53
A1:
TCPには「送った順番どおりに受信される」と言うこと以外は期待しないでください。2つにパッキングして送信されたとしても、受信側で2回に分けて受信される保障もありません。データの境界を識別できるように、きっちりプロトコルを実装してください。 もし別々に受信されることを期待しているなら、UDPを使いましょう。もちろん到達の保障はありませんから、相手に届かなかった場合のエラーリカバリーをプロトコルとして実装することになる訳ですけど。 資料に関しては・・・インデックス紛失。 この手の情報って意外に少ないんですかね? A2: Socketを使う必要があるかは、想定しているターゲット次第でしょう。通信に利用できるのは何もSocketだけではありません。DirectXのDirectPlayにゲーム用の高機能な通信ライブラリが用意されています。これを使っても構いません。その他の、通信用のライブラリを用いても構わないでしょう。 A3: 質問の意味が良くわかりませんでした。クライアントの何を管理するんですか? 管理するクライアントの情報は、貴方の実装したアプリケーション独自のものではないのですか?独自のものなら、それを管理するツールが都合よく売っているわけ無いですよね。それともユーザー管理の分部などで、標準のコンポーネントを使いたいと言うことなんでしょうか?だったら、Windows認証でも何でも好きなものを使えば良いわけで・・・。 | ||||||||
|
投稿日時: 2004-04-29 19:06
>A3: 質問の意味が良くわかりませんでした。クライアントの何を管理するんですか?
ーー>Clientのインターネット管理の部分を既存のプログラムを利用したと言うことです。又、(言い忘れましたが、Serverのインターネット管理の部分も既存のプログラムを利用したい訳です) つまり、インターネットの部分は特別な知識なくして、通信を実現したい訳です。 その回答の一つとして、貴方のA2”DirectXのDirectPlayにゲーム用の高機能な通信ライブラリ”一つの答えと思います。 | ||||||||
|
投稿日時: 2004-04-29 20:33
インターネットの管理ってなんですか…? | ||||||||
|
投稿日時: 2004-04-29 22:50
>インターネットの管理ってなんですか…?
ーー>Socketを使用してプログラムを組むことです。特にサーバーは多数のClientにサービスを提供しなくてはならないので、大変です(VC++の話ですが)。 この部分をBlackboxとして提供してくれるshareware等があればと考えています。 確か、WindowsXpのPrにはHTTP対応のSVサービスがあるようですね(少し齧っただけですが)。 | ||||||||
|
投稿日時: 2004-04-29 23:31
諸農です。
shiggyさんのお考えでは、 「インターネットの管理」=「ソケットプログラミング」 なのかもしれませんが、傍目には(少なくとも私個人では)同じ位置 付けにはならないと感じますが。。。 OSI参照モデルで言うところのネットワーク層、トランスポート層と、 実際にプログラミングで実現したいことがごっちゃ混ぜになっていま せんか。というか、何をプログラミングしたいのでしょうか。 表題の通り、IPとルーティングが実現されているインフラ上での プレゼンテーション層に対する独自フォーマット、アプリケーション 層に対する独自プロトコルによるプログラミングなのでしょうか?
ブラックボックスって。。。? プログラミングしたいというわけではない、のでしょうか? というか、IISを使いたいってことですか? IEは使わずにHTTPビューワー(私はブラウザと呼んでいますが)を 作りたい?使いたい?。。 [追加編集始まり] クライアントにサービスを提供するサーバーアプリを作成したいと いう事でしょうか? であれば、.NET Remotingも視野に入れていいかなとは思いますが。 [追加編集終わり] うむむ、私の読解力の無さが原因かとは思いますが、いまいち何をどう したいのか伝わってきませんでした。ごめんなさい。 _________________ 諸農和岳 Powered by Borland Delphi/C++Builder & Microsoft VS.NET [ メッセージ編集済み 編集者: Jubei 編集日時 2004-04-29 23:38 ] |