4

作業中の小さなプロジェクト用にWebSocketServerを作成しようとしています。

サーバー(自宅にあります)をセットアップし、ポートを80と22に転送しました。このチュートリアルを読みました:ここ

また、サーバーにSSHで接続して「startDarmon.php」を実行すると、次のエラーが発生します。

PHP Warning:  socket_bind(): unable to bind address [98]: Address already in use in  
/var/www/server/socket.class.php on line 48
2013-02-23 14:15:38 System: Socket bound to localhost:8000.
2013-02-23 14:15:38 System: Start listening on Socket

これが私のクライアントがサーバーに接続するのを妨げていると私が思うものです。したがって、startDarmon.phpファイルには次のものがあります。

$WebSocket = new socketWebSocket('MY_IP_NOT_LAN_IP',8000);

そして私のクライアントファイルの中に、私は持っています:

var host = "ws://MY_IP_NOT_LAN:8000/server/startDaemon.php";

なぜこれが私に接続を確立することを許可しないのかについて誰かが何か提案がありますか?

4

3 に答える 3

6

Linuxサーバーに問題があると思います。

netstat -a -p -nルートの下でコマンドを実行して(たとえば、sudoを使用して)、どのプロセスがそのポートを使用しているかを理解します。次に、setsockopt(2)を使用して実行しますSO_REUSEADDR (詳細については、socket(7)を参照してください)。

TCPプロトコルには、分単位で指定された遅延があります(たとえば、キープアライブなど)。たとえば、tcp(7)を参照してください

Advanced LinuxProgrammingのようなLinuxシステムプログラミングに関する良い本と、おそらくネットワークプログラミングに関するいくつかの資料を読むことをお勧めします。

于 2013-02-23T14:26:13.573 に答える
3

以下の設定を使用して、アドレスを再利用できます。

if ( ! socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) 
{ 
    echo socket_strerror(socket_last_error($sock)); 
    exit; 
}
于 2013-11-08T09:09:02.577 に答える
2

別のアプリケーションが、使用しようとしているポートをすでに使用しています。実行できます

lsof -i:port_no

ポートを解放します。

于 2015-12-28T06:36:29.783 に答える