2017-10-31 14 views

答えて

0

システムに複数のネットワークインターフェイスがあり、そのうちの1つがローカル接続のみを受け取り、他のインターフェイスを無視する必要がある場合は、ServerSocketにnetorkインターフェイスのIPアドレスを設定して、

ServerSocket ssocket = new ServerSocket(1234, 10, InetAddress.getByAddress("192.168.1.1")); 

明らかに、2つのServerSocketsが必要です。

同じネットワークインターフェイスからローカル接続とリモート接続を受信した場合は、リモートピアを自分で確認する必要があります。これは、異なる方法で行うことができます。

  • あなたはcheckAcceptを実装し、接続試行が間違った場所から来る場合SecurityExceptionをスローSecurityManagerを設定することができます。これはグローバル設定なので、そこから接続を受け入れるべきであるアプリケーションの他の部分にServerSocketを設定することはできません。
  • あなたはローカルであるとServerSocketから返されるSocketのIPとポートを確認し、それがない代わりに、あなたがServerSocketのサブクラスを作成することができます
  • super.acceptを呼び出す方法 checkAcceptをオーバーライド要求を続けるのかどうソケットを閉じることができますオプション2で説明したように対応するチェックを行い、検索された接続が基準に適合する場合にのみ返すか、そうでなければそれを閉じてスーパーメソッドを再度呼び出します。
+0

答えをありがとうが、私はより簡単な方法を見つけた。 isAnyLocalAddress()は、接続がローカルネットワークから来ている場合にtrueを返します。 – oksuzlerOmer

0

ローカルIPアドレスを受け入れるコンストラクタを使用してServerSocketを作成し、そのIPアドレスとして127.0.0.1を指定します。

+0

私が質問を理解する限り、それはローカルシステム、つまりローカルマシンと同じネットワーク内のシステムからの接続に関するものです。だから我々は 'localhost'からの接続について話していません – Lothar

+0

はい私はlocalhostを求めませんでした。 – oksuzlerOmer

関連する問題