次のテストコードは、appserv を使用してローカルに構築した環境で正しく実行されます。そして、クライアントを使用してそれに接続し、実行することができます。
<?php //Reduce errorserror_reporting(~E_WARNING); //Create a UDP socketif(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0))){ $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); die("Couldn't create socket: [$errorcode] $errormsg \n");} echo "Socket created \n"; // Bind the source addressif( !socket_bind($sock, "localhost" , 9999) ){ $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); die("Could not bind socket : [$errorcode] $errormsg \n");} echo "Socket bind OK \n"; //Do some communication, this loop can handle multiple clientswhile(1){ echo "Waiting for data ... \n"; //Receive some data $r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port); echo "$remote_ip : $remote_port -- " . $buf; //Send back the data to the client socket_sendto($sock, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);} socket_close($sock);?>
Configure Command './configure' '--prefix=/usr/local/php5' '--enable-force-cgi-redirect' '--enable-fastcgi' '--with-config-file-path=/usr/local/etc/php5/cgi' '--with-curl=/usr/local/lib' '--with-gd' '--with-gettext' '--with-jpeg-dir=/usr/local/lib' '--with-freetype-dir=/usr/local/lib' '--with-kerberos' '--with-openssl' '--with-mcrypt' '--with-mhash' '--with-mysql=/usr' '--with-mysqli=/usr/bin/mysql_config' '--with-pcre-regex=/usr/local' '--with-pdo-mysql=/usr' '--with-pear' '--with-png-dir=/usr/local/lib' '--with-xsl' '--with-zlib' '--with-zlib-dir=/usr/local/lib' '--enable-zip' '--enable-gd-native-ttf' '--with-iconv=/usr/local' '--enable-bcmath' '--enable-calendar' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-mbstring'
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
socketsSockets Support enabled
default_socket_timeout 60 60
ポート番号を変更します
一度開いたポートは再度開くことはできません
localhost をサーバー IP に手動で変更し、set_time_limit(2); を追加しました
実行結果は上記と同じです。スキャンにより、ポートが開いていることが示されますが、クライアントは通信できません。
しかし、私はすぐにこれを見ました:
The server encountered an internal error or misconfiguration and was unable to complete your request
サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんでした
サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんでした
サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんでした
サーバーで内部エラーまたは構成エラーが発生したため、リクエストを完了できませんでした
何か提案はありますか?たとえば、ログを確認したり、どのように試してみますか?
ファイアウォールか何かを確認してください
9999 は開いているポートですが、他のプログラムによって占有されていますか? 他のプログラムによって占有されていない場合は、ファイアウォールを設定することを検討してください
それ以外の場合は、新しいポートを変更するか、ポート 9999 を占有しているプログラムを閉じるだけです
そのプログラムを別のポートに変更することもできます
つまり、1 つのポートは 1 つのプログラムにのみマッピングできます
さて、最後の試みは無駄でした。 VPS上でも移動できません。それでいいのです。