web-dev-qa-db-ja.com

LANIPアドレスでWebSocketサーバーを接続します

学習を目的としてWebSocketチャットを設定しました。すべてが機能していますが、この問題を理解できません。

クライアント側の接続のアドレスとして_127.0.0.1_を指定すると、サーバーをホストしているコンピューターからサーバーにアクセスできますが、アドレスをホストコンピューターの実際のLANアドレスに変更するとアクセスできません。ホスト自体からでもサーバーに接続します。見る:

Server = new FancyWebSocket('ws://127.0.0.1:9300');動作しているように見えますが、サーバーをホストしているコンピューターのみが接続できます(明らかな理由により)

Server = new FancyWebSocket('ws://192.168.1.3:9300');コンピューターは接続できません。 _192.168.1.3_がホスティングコンピュータのLANアドレスであることを確認しました。

ローカルネットワークの他のコンピューターが接続できるように、そこにどのアドレスを入力する必要がありますか?

11
php_nub_qq

私は問題を解決しました。 2つの答えの組み合わせだったので、公正なことは説明付きの別の答えを追加することだけだと思いました。

@Mehranが提案したように、サーバーアドレスをネットワークアドレスではなく127.0.0.1として設定しました。それを192.186.1.3に変更した後、サーバー自体から接続できましたが、他のマシンは接続できませんでした。次に、@ vtortolaの回答で提供されているガイドの手順を実行して、サーバーのファイアウォールに新しいインバウンドルールを追加し、そのポートを使用できるようにしました。

ついにすべてがうまくいきました。助けてくれてありがとう。 +みんなに返信!

7
php_nub_qq

これは、WebSocketサーバーの構成が原因であると確信しています。着信接続を受け入れるには、ローカルホスト(127.0.0.1)をリッスンしている必要があります。その場合、192.168.1.3を狙っている接続には応答しません。

使用しているサーバーについて言及しなかったため、特定することはできませんが、一般に、リスニングソケットをインスタンス化するには、特定のIPアドレスにバインドするか、*でシステムのアドレスをバインドする2つの方法があります。 LAN内の任意のコンピューターからのサーバー接続に応答する場合は、後で構成する必要があります。

3
Mehran

私にはファイアウォール/ポリシーの問題のように見えます。

IISインストールによって開かれるため、TCP 80が許可される可能性があります。これにより、通常のWebブラウジングが機能する理由が説明されます。しかし、TCP 9300に接続しようとしています。デフォルトで許可されている可能性はほとんどありません。

これを試してみてください: Windows 7ファイアウォールでポートを開く方法 、そしてそのポートを許可します。

2
vtortola

この問題のトラブルシューティング中に安全に想定できることがいくつかあります。

  • サービスが同じマシン上の127.0.0.1で動作できる場合、問題はコードまたはPHP構成にない)と見なすことができます。

  • サーバーが192.168.1.3:9003にバインドしようとしたときにエラーが発生しない場合は、サービスが機能していると安全に推測できます。リソースモニターを開いて、実際にこのポートをリッスンしているかどうかを確認してください。これを行うには、Windowsの[スタートメニュー]に移動し、[プログラムとファイルの検索]ボックスに「リソースモニター」と入力します。リソースモニターを開いた後、[概要]タブをクリックして、サーバープロセスの名前を見つけます(CLIを使用している場合は通常「php」)。プロセスを選択した状態で、[ネットワーク]タブに切り替えると、[TCP接続]パネル内のポートでリッスンしているかどうかを確認できます。これにより、リストされているアドレスとポート、およびサービスに接続されているクライアントのリモートアドレスとポートが表示されます。

  • サーバーが実行されていることがわかっていて、サーバーが予期されたアドレスとポートをアクティブにリッスンしていることがわかっている場合は、Windowsまたはルーター内のファイアウォールの問題である可能性があります。 192.168.1.3はインターフェイスに割り当てられたIPですが、これはローカルIPではなく、192.168.1.3との間のすべての通信は、同じマシンで送信される場合を含め、引き続きWindowsファイアウォールを通過することに注意してください。 。この時点ですでに使用している場合は、最初にWindowsファイアウォールを確認することを強くお勧めします。 Windowsファイアウォールでない場合は、ルーターがポートをブロックしていないかどうかを確認し、ポート転送やその他の設定を確認して、ルーターが他の方法で干渉していないことを確認します。ここでルーターの問題を解決できる可能性がありますが、ルーターのマニュアルを手元に用意してください。

HTTPは一般的なサービスポートであるため、ルーターがポートをブロックしていない可能性が非常に高く、IISを使用している場合は、Windowsが自動的にポートを開いている可能性があります。 9300は共通のポートではないため、デフォルトが「オールイン」である場合を除いて、どのような状況でもデフォルトで開くことはほとんどありません。これは、ファイアウォールを使用していないことを意味します。

(可能であれば)既存のHTTPサービスを閉じ、Websocketサービスを使用してポート80にバインドするか、可能であれば(注意を払いながら)Windowsファイアウォールを完全にオフにして、接続に十分な時間がかかるかどうかを確認します。

2
JSON

Linuxシステムの場合はお手伝いできます。

ローカルネットワーク上にネームサーバーがない場合でも、IPアドレスとマシンホスト名をマッピングする小さなテーブルを/ etc/hostsファイルに確立することができます。これは通常、ローカルネットワークステーション用に予約されています。

このファイルは、ネットワークが停止しているときやDNSサーバーにアクセスできないときでも利用できますが、ネットワーク上のすべてのマシンで複製された場合にのみ実際に役立ちます。通信のわずかな変更では、ファイルをどこでも更新する必要があります。これが、/ etc/hostsが一般的に最も重要なエントリのみを含む理由です。

このファイルは、インターネットに接続されていない小規模なネットワークには十分ですが、5台以上のマシンでは、適切なDNSサーバーをインストールすることをお勧めします。

すべての「ip:port」をホスト名とともに追加し、すべてのシステムのファイル/ etc/hostsにテンプレートをコピーしてみてください。

それが問題を解決することを願っています!

1
Amar

一般に、自分のマシンからローカルネットワークのIPアドレスに到達しようとしないでください。ここのソケットレイヤーで発生する非常に紛らわしいことがありますが、あまり深く掘り下げないようにします。 OSはこれを機能させるために邪魔になりません。時々。それ自体から192.168.1.3(私が想定しているサーバー)に到達することはできないと思います。すべてを複雑にすることを行うと、ローカルエンドポイントアドレス間に変換があります。

ネットワークスイッチは通常、フレームを受信したばかりのポートに送り返しません。そのため、cmd PromptでローカルIPにpingを実行すると、OSが取っているループバックショートカットが表示されます。

別のマシンからアクセスできないと、サーバーでソケットが正しくバインドされていない可能性があります。サーバー(アドレスとポート)でソケットを明示的に宣言していること、およびそのソケットのリスナーがbindingであることを再確認してください。また、バインドするアドレスが正しいネットワークアダプタ用であることを確認してください。これは、複数のアダプターが接続されているラップトップやマシンで常に見られます。

残念ながら、FancyWebSocketとは何か、またはその構成方法に慣れていないため、応答の対象を絞ることはできません。

1
selkathguy