掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TCP/IPでの全二重通信を実現するには? (ID:67623)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境: 開発環境:MS C++ Ver 6 クライアント:Windows2000以降のOS サーバ:Windows Server 2003 通信方式:TCP/IP 接続方式:ポート番号は一つだけとし、送受信はその一つのポートのみで行う。 現在上記の環境で、非同期通信での送受信を行うモジュールを開発しました。 クライアント、及びサーバから同時にデータ(ファイル)を送信する際、 クライアントからサーバへ1ファイルを送信。 サーバからクライアントへ1ファイルを送信。 クライアントからサーバへ1ファイルを送信。 サーバからクライアントへ1ファイルを送信。 (以降繰返し) 上記の様な挙動を取ります。 この時、送るファイルサイズがソケットから読み込める最大サイズ(FIONREADで取得できる値)を超えた場合、 受信側はいくつかのデータに分割してデータを読み込みます。 クライアントからサーバへ1ファイルを送信。 (サーバは複数のデータを受信・連結してファイルに保存) サーバからクライアントへ1ファイルを送信。 (クライアントは複数のデータを受信・連結してファイルに保存) クライアントからサーバへ1ファイルを送信。 (サーバは複数のデータを受信・連結してファイルに保存) サーバからクライアントへ1ファイルを送信。 上記の()内が実際の挙動となります。 上記挙動を確認した人間から、これは「全二重ではなく半二重である」と言われました。 具体的には、 「1ファイルずつのやりとり」ではなく、 「1送受信単位のデータのやりとり」を行わなくてはいけないそうです。 ただ、今用いている方法では、send は一度で全てのデータ(1ファイル単位)を送ってしまいますし、 現在のものに改良を加えただけでは、全二重方式になりそうには思えません。 インターネットを利用して、いろいろ調べてみましたが、 今のところ有用となる情報源も見つからない状態です。 そこでいくつか質問がございます。 ※ 制限項目 ポートは一つだけ用いることとし、二つ以上のポートを用いることは出来ない。 サーバとクライアントは1:1である。 TCP/IP以外の通信方式は考慮しない。 通信機器は全二重通信に対応している物とする。 質問内容: 1.全二重方式は、シングルスレッドのアプリケーションで実現可能であるか、もしくはマルチスレッドで作成する必要があるか。 2.send を用いた際に、1ファイル単位での送信となってしまうが、これを分割して送信する方法が提供されているか。 また、上記質問に回答する形でなくても、全二重通信に関するなんらかの有用な情報をお知りでありましたら、 教えて頂ければと思います。 当プログラムを作成する際に参考にしたHP: http://yonex1.cis.ibaraki.ac.jp/Win32/lecture03.html 上記HPにて掲載されていたサンプルプログラムソース http://yonex1.cis.ibaraki.ac.jp/Win32/src/chat.cpp
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.