人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ソケット通信でサーバー1台とクライアント5台が共通のポート番号で通信するとします。
クライアントaから送信されたデータをサーバーで中継して、クライアントcだけに指定して転送したりできるのでしょうか?

すべてのクライアントに送信して自分宛のものか判定するのは無しとします。
クライアント同士での通信は行わずに必ずサーバーを中継するものとします。

もしできない場合は、共通のポートではなく、クライアントごとにポートを変更するのでしょうか?

●質問者: GanbareNIPPON
●カテゴリ:コンピュータ インターネット
✍キーワード:クライアント サーバー データ ポート 転送
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● loio
●35ポイント

やりたいことの構成がいまひとつ不明ですが、サーバがそういう風に振舞うようプログラムを書けば可能です。

ソケット通信の層では、相手がサーバかクライアントかどのPCかは区別はしません。

相手がだれか特定したり、特定した相手によって挙動を変えたりするのはアプリケーションの仕事です。パケットを中継することもそうです。ですのでアプリケーションをそう書けばできすし、要求仕様に無理や矛盾がなければそう難しいことでもありません。


2 ● monyo
●35ポイント

「データの中継」が可能か不可能かでいえば、「可能」ですが、別の方もおっしゃっているように、ソケット通信の設定で行うことではなく上位のアプリケーションで行う必要があります。クライアントaからの通信は、常にクライアントcに転送するのであれば、サーバ側で送信元のIPアドレスを判別して、クライアントcに中継すればよいでしょうし、ケースバイケースで行いたいのであれば、アプリケーションレベルで作りこむことになります。

逆にいうと、ソケット通信の設定などの範疇で可能かといわれれば、「不可能」ともいえます。

「パケットの中継」が可能かといわれればやはりソケット通信の設定としては不可能ですが、たとえば Linux であれば、iptables を駆使して透過型プロキシの機能を使えば「クライアントaからのパケットを常にクライアントcの指定ポートに転送」することは可能です。

なお、「共通のポート番号で通信」と記載していますが、送信用のポートと受信用のポートは別にする必要があることはご存知ですよね。もう少し技術的なところを確認して、何をやりたいかを明確化させることをお勧めします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ