15

以下のWebサイトのHTML5Websocketチュートリアルに従いました。

http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

それはうまくいきました、そして私はクライアント側のページでホスト値を「localhost:8080」から「218.175.192.160:8080」(私のIP)に変更しました、サーバー側はまだ「localhost:8080」を維持しました。

「 http://218.175.192.160:8080/client.html 」などのhttpプロトコルを使用してブラウザ(apache)でページを表示できますが、クライアント側のソケットは「ws」に接続できません。 ://218.175.192.160:8080/daemon.php "。(編集されたタイプミス)

私の質問は次のとおりです。1。クライアント側で、websocketが「ws://218.175.192.160:8080 / daemon.php」ではなく「ws:// localhost:8080/daemon.php」でのみ機能するのはなぜですか。

2. socket_bind($ socket、 "127.0.0.1"、8080)は機能するのに、socket_bind($ socket、 "218.175.192.160"、8080)でエラーが発生するのはなぜですか?システムは「アドレス[0]をバインドできません:要求されたアドレスはそのコンテキストでは無効です」と通知します。IPアドレスは私のサーバーに属していると確信しています。

助けてください、ありがとう。

エラーの理由を見つけました:ルーターにNATサービスを設定したにもかかわらず、ルーターを使用したために間違ったアドレスをバインドしましたが、「218.175.192.160」のアドレスがルーターのインターフェイスに属していることを忘れました。私のサーバーマシン。

サーバーマシンのアドレスは、ローカルアドレスタイプである必要があります。たとえば、「192.168.1.2」は、実際にはLANカードインターフェイス上にあります。

基本的なネットワーク設定を忘れてすみません:(、この投稿が私のようなネットワーク初心者に役立つことを願っています、thx〜:)

4

4 に答える 4

2

同じオリジンポリシーがWebSocketとサーバーポートの両方に適用されると思います。そのため、クライアントとサーバーの両方が一致する必要があります。一致しないと、接続が失敗します。

あなたの例では、以下を使用しました:

http://218.175.192.160:8080/client.html
ws://218.175.192.160/daemon.php

単なるタイプミスかどうかはわかりませんが、これは

http://218.175.192.160:8080/client.html
ws://218.175.192.160:8080/daemon.php
于 2010-08-15T21:20:09.303 に答える
2

socket_bind( $socket, "127.0.0.1", 8080 )からのリクエストのみを許可するように指示するの代わりに、localhost任意のIPからのリクエストを許可する「0.0.0.0」にバインドします。

だからそれを作ってsocket_bind( $socket, "0.0.0.0", 8080 )、それはうまくいくでしょう。

于 2013-04-26T03:12:54.403 に答える
1

この方法でPHPサーバーを初期化するためにまだ「localhost」を使用していますか?:

public function __construct($host='localhost',$port=8000,$max=100)  

これを行うと、サーバーはローカルホストインターフェイスにのみバインドされます。Apacheからファイルを正しく提供している場合でも、phpwebsocketsコードを外部IP用に構成する必要があるようです。

于 2010-08-16T00:26:45.183 に答える
1

私もこの問題を抱えていました。

問題は、ルーターのIPアドレスを参照している可能性が高いことです。あなたがする必要があるのはあなたのコンピュータのIPアドレスを参照することです。

localhostはルーターではなく個々のコンピューターを指しているため、localhostで機能します。

于 2010-08-25T16:46:15.213 に答える