2012-04-02 20 views
1

私は次のコードでPHPのTCP/IPサーバーを作成しようとしている:私は、ランダムに3804ポートで動作するように選択しましたPHPのソケット接続

<?php 
// set some variables 
$host = "localhost"; 
$port = 3804; 

// don't timeout! 
set_time_limit(0); 

// create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

// bind socket to port 
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); 

// start listening for connections 
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); 

// accept incoming connections 
// spawn another socket to handle communication 
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); 

// read client input 
$input = socket_read($spawn, 1024) or die("Could not read input\n"); 

// clean up input string 
$input = trim($input); 

// reverse client input and send back 
$output = strrev($input) . "\n"; 
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n"); 

// close sockets 
socket_close($spawn); 
socket_close($socket); 
?> 

を、私はにtelnet接続しようとしているときそのポート上の私のホスト私は接続を行うことができません..私のPHPスクリプトがそのポートを聞くことができるようにするには、PHPのスクリプトがホストされているサーバーで行う必要がある以上の設定ですか?

答えて

2

の2番目のパラメータとして"localhost"を渡すので、ソケットはアドレスlocalhostからの接続をリッスンします(通常は127.0.0.1)。どこからでも接続できるように$host = '0.0.0.0';と設定します。

また、コードが私のために動作することをポート3804

+0

ローカルホストを本物のIPに変更しました。 私はサーバーの管理者ではありません。そのUNIXサーバーと私は/ etc/servicesファイルを見てきました。ポート50000は何にでも登録されていないことがわかりました。私はもっ​​と何を試すことができますか?またはサーバーでどのような設定を行う必要がありますか? –

+0

まあ、どんなエラーがありますか?正確なエラー(およびおそらくパケットダンプ)がなければ、問題を特定することは不可能です。 3804と50000の両方が登録されていませんが、登録されたポートを選択することは禁じられていません。 – phihag

+0

エラーは次のとおりです。ホストからポート50000への接続が開けませんでした:接続に失敗しました –

1

への接続を介してできるようにファイアウォール(複数可)を設定することもできます。このコードをApacheや他のWebサーバーから実行していますか? php -aでこれらの行を実行しようとしましたか?

+0

私は別のWebサーバーから実行しました。私は-aと-qの両方を試しました.. 私はそのサーバと何か考えます。 –