2016-08-21 4 views
2

現在、私はIPアドレスでサーバ側に接続していますが、サーバコンピュータのIPアドレスを指定する必要はありません。とにかく私はちょうど現在のserversocketがネットワーク上で開いていることを検出することができ、クライアント側からそれに接続しますか?ソケットサーバとソケットクライアントjava - 異なるコンピュータにあるクライアントからサーバを検出する

これは私がサーバー用に書いたものです:

server = new ServerSocket(1234,100); 

と、クライアント側で:

connection = new Socket(InetAddress.getByName("someIpAddress"),1234); 

答えて

2

サーバが同じネットワーク上に常にある場合、あなたは常ににUDPブロードキャストを使用することができますサービスを検出する。

サーバはブロードキャストをリッスンし、応答してIPアドレスを送信します。

サーバーとクライアントが異なるネットワーク上にあり、その間に少なくとも1つのルーターがある場合、クライアントからサーバーを「検出」する方法はありません。

+0

OPは、特にJava(そのタグを確認してください)に関係しています。私は、このアプローチが、彼が答えとして追加したものを達成するためにサードパーティのツールを使用しなければならないので、彼を直接助けるとは思わない。 –

+0

@Am_I_Helpful私はJavaに精通していませんが、JavaでUDPソケットを作成する方法がないと教えていますか?または、 'SO_BROADCAST'ソケットフラグをセットするには? –

+0

私はあなたの答えの最後の段落をもっと心配しています(なぜなら、ルータとゲートウェイは一般にブロードキャストメッセージを転送しないからです)。私はそれが不可能であると言っているわけではありません。しかし、Cとは異なり、最後のセクションを達成するために外部ライブラリを使用する必要があります。 –

1

サーバーのIPアドレスを指定する必要がありません。 コンピュータです。とにかく、私はちょうど現在のserversocketがネットワーク上で開いて であることを検出することができ、clientsideからそれに接続しますか?あなたが与えられたネットワーク内のサーバを知らない場合は、サーバーソケットは、既知のポート上で実行されていることを検出することが非常に面倒な作業です

二つの側面が以下で説明されています。 Java SEには、の強度が自動的にはありません。は、ネットワーク上のどのシステムがXポートでリッスンしているサーバーソケットを持っているかを判断します。あなたはそれを達成するためのサードパーティのツールが必要になります。それを判断するヒット&トライアルベースのアプローチを持つことができます。

  • もう一つのポイントは、サーバーのホスト名(コード内の "someIpAddress.com"など)を知っていれば、その場合はすべてIPアドレスを取得するホスト名リゾルバになります渡されたホスト名

    クライアントの/ etc/hostsファイルに、サーバーのホスト名とIPに関するマッピングを付けることができます。あるいは、あなたのリクエストをIPにリダイレクトするDNSサーバーを用意し、Xポートでリッスンしているサーバーに接続させることもできます。

  • 関連する問題