ホームページ バックエンド開発 PHPチュートリアル 専門家の皆さん、php のソケットに関する問題について教えてください。

専門家の皆さん、php のソケットに関する問題について教えてください。

Jun 13, 2016 pm 01:11 PM
input quot socket

専門家の皆さん、php のソケットの問題について教えてください。
ハードウェアがサーバー ポートにデータを送信し (パケット キャプチャ ソフトウェアは正しい 16 進数を取得します)、パケット キャプチャ ソフトウェアによってキャプチャされたデータは正常です (16 進数)。 ) ) ただし、php ソケットを介して受信したデータ (変換後も 16 進数であり、変換しないと文字化けします)、コードを以下に貼り付けます。専門家が問題を見つけるのを手伝ってください。 PHP ソケットで取得したデータとパケット キャプチャ ソフトウェアで取得したデータが異なるのはなぜですか?

パケット キャプチャ ソフトウェアで取得した正しいコードは (16 進数): FA 01 01 FF AA 03 00 01 00 0B 00 00 00 A3
php ソケットを通じて取得されたデータ (dechex()、ord() を通じて変換され、ソフトウェアがキャプチャしたものとは異なり、間違っています): fa 7 25 2 fa 2 0 9 f6 4 2c 88 fa 1

以下の PHP ソケット コードを貼り付けます:

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
エラー報告(E_ALL);
set_time_limit(0);
ini_set("allow_call_time_pass_reference",true);

// リスニングポート
$ポート = 8888;
//最大接続プール
$MAX_USERS = 50000;
//リスニングポートを作成
//$sock = ソケット作成_リッスン($PORT);


$commonProtocol = getprotobyname("tcp");
$sock =socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
@socket_bind($sock, '192.168.1.101', 8888);
@socket_listen($sock);




if (!$靴下)
{
    終了(1);
}
//ブロックしないでください
ソケットセット_ノンブロック($sock);

$connections = array();
$input = 配列();
$close = 配列();

その間(真)
{
    //スリープ(3);
    $readfds = array_merge($connections, array($sock));
    $writefds = 配列();

    //接続を選択し、読み取りおよび書き込み接続チャネルを取得します
    if (socket_select($readfds, $writefds, $e = null, $t=60))
    {
        foreach ($readfds を $rfd として)
        {
            // 現在のサーバーのリスニング接続の場合
            if ($rfd == $sock)
            {
                //クライアント接続を受け入れる
                $newconn = ソケット受け入れ($sock);
                $i = (int)$newconn;
                $reject = '';
                if (count($connections) >= $MAX_USERS)
                {
                    $reject = "サーバーがいっぱいです。後でもう一度お試しください。n";
                }
                //現在のクライアント接続をsocket_select選択として配置します
                $connections[$i] = $newconn;
                //入力接続リソースキャッシュコンテナ
                $writefds[$i] = $newconn;
                //接続が異常です
                if($拒否)
                {
                    $close[$i] = true;
                }
                それ以外
                {
                    echo "PHP チャット サーバーへようこそ!n";
                }
                //現在の接続からコンテンツを読み取るためにキャッシュ コンテナを初期化します
                $input[$i] = "";
                続く;
            }
            //クライアント接続
            $i = (int)$rfd;
            //読む
            $tmp = @socket_read($rfd, 14, PHP_NORMAL_READ);
            if (!$tmp)
            {
                //コンテンツを読み取れません
                print "ソケット $in で接続が閉じられました";
                閉じる($i);
                続く;
            }
            $input[$i] .= $tmp;
            $tmp = substr($input[$i], -1);
            /*if ($tmp != "r" && $tmp != "n")
            {
                // 行末がないため、さらにデータが来ます
                続く;
            }*/
            $line = トリム($input[$i]);
            $input[$i] = "";
            echo 'クライアント >>'.$line."rn";
            
            
            
            $data=str_split($line);
 
 print_r($data);
 「rn」をエコーし​​ます。
            
            //$data =explode("t",$line);
            //$data=str_split($data);
            foreach($data as $v){
             echo dechex(ord($v))."t";
             
             }
             「rn」をエコーし​​ます。
            
            
            
            
            ソケット_getpeername($connections[$i],&$remoteIP,&$remotePort);
echo $remoteIP."rn";
echo $remotePort."rn";
//$data=str_split($buffer);
//print_r($data);
$str="xFAx01x01xFFxAAxAAx00x01x00x00x00x00x00x01";
 ソケット送信($connections[$i],$str,strlen($str),0);
            
            
            
            
            
            
        }
        foreach ($writefds を $wfd)
        {
            $i = (int)$wfd;
            $w = ソケット書き込み($wfd, "こんにちは");
        }
    }
}

関数クローズ($i)
{
    グローバル $connections、$input、$close;
    ソケットシャットダウン($connections[$i]);
    ソケットクローズ($connections[$i]);
    unset($connections[$i]);
    unset($input[$i]);
    unset($close[$i]);
}
?>

 <div class="clear"></div>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP+SocketシリーズのIO多重化とWebサーバーの実装 PHP+SocketシリーズのIO多重化とWebサーバーの実装 Feb 02, 2023 pm 01:43 PM

この記事では、php+socket に関する関連知識を提供します。主に IO 多重化と php+socket が Web サーバーを実装する方法を紹介します。興味のある方は以下をご覧ください。皆様のお役に立てれば幸いです。

Pythonのsocketとsocketserverの使い方 Pythonのsocketとsocketserverの使い方 May 28, 2023 pm 08:10 PM

1. TCP プロトコルに基づくソケット プログラミング 1. ソケット ワークフローはサーバー側から始まります。サーバーはまずソケットを初期化し、次にポートにバインドし、ポートをリッスンし、accept を呼び出してブロックし、クライアントが接続するのを待ちます。このとき、クライアントがSocketを初期化してからサーバーに接続(connect)すると、接続に成功するとクライアントとサーバー間の接続が確立されます。クライアントがデータ リクエストを送信し、サーバーがリクエストを受信して​​処理し、次に応答データをクライアントに送信し、クライアントがデータを読み取り、最後に接続を閉じます。インタラクションは終了します。インタラクションを実装するには、次の Python コードを使用します。 :インポートソ

vue3 で入力コンポーネントと統合フォームデータをカプセル化する方法 vue3 で入力コンポーネントと統合フォームデータをカプセル化する方法 May 12, 2023 pm 03:58 PM

準備 vuecreateexample を使用してプロジェクトを作成します パラメーターは大まかに以下のとおりです ネイティブ入力を使用します ネイティブ入力は主に値と変更です 変更する場合はデータを同期する必要がありますApp.tsx は次のとおりです: import{ref}from'vue';exportdefault{setup(){//username はデータです constusername=ref('Zhang San');//入力ボックスが変更されると、データを同期します constonInput =;return( )=>({

Spring Boot + Vue を使用してソケット通知プッシュを実装する方法 Spring Boot + Vue を使用してソケット通知プッシュを実装する方法 May 27, 2023 am 08:47 AM

SpringBoot 側の最初のステップは依存関係を導入することです。まず、WebSocket に必要な依存関係と、出力形式 com.alibabafastjson1.2.73org.springframework.bootspring-boot-starter-websocket を処理するための依存関係を導入する必要があります。 2 番目のステップは、WebSocket 構成クラス importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Config を作成することです。

PHPソケットが接続できない場合の対処法 PHPソケットが接続できない場合の対処法 Nov 09, 2022 am 10:34 AM

php ソケットに接続できない問題の解決策: 1. php でソケット拡張機能が有効になっているかどうかを確認します; 2. php.ini ファイルを開いて、「php_sockets.dll」が読み込まれているかどうかを確認します; 3. 「php_sockets.dll」のコメントを解除します」。

Laravelの入力隠しフィールドを実装する方法 Laravelの入力隠しフィールドを実装する方法 Dec 12, 2022 am 10:07 AM

laravel入力の隠しフィールドを実装する方法: 1. Bladeテンプレートファイルを見つけて開きます; 2. Bladeテンプレートのmethod_fieldメソッドを使用して隠しフィールドを作成します。作成構文は「{{ method_field('DELETE') }}」です。 」。

PHPとSocketを用いたリアルタイムファイル転送技術の研究 PHPとSocketを用いたリアルタイムファイル転送技術の研究 Jun 28, 2023 am 09:11 AM

インターネットの発展に伴い、ファイル転送は人々の日常の仕事や娯楽に不可欠な部分になりました。ただし、電子メールの添付ファイルやファイル共有 Web サイトなどの従来のファイル転送方法には一定の制限があり、リアルタイム性とセキュリティのニーズを満たすことができません。したがって、PHP と Socket テクノロジを使用してリアルタイムのファイル転送を実現することが新しいソリューションになりました。この記事では、PHP と Socket テクノロジを使用してリアルタイム ファイル転送を実現する技術原理、利点、アプリケーション シナリオを紹介し、具体的なケースを通じてこのテクノロジの実装方法を示します。テクノロジー

C# における一般的なネットワーク通信とセキュリティの問題と解決策 C# における一般的なネットワーク通信とセキュリティの問題と解決策 Oct 09, 2023 pm 09:21 PM

C# におけるネットワーク通信とセキュリティの一般的な問題と解決策 今日のインターネット時代では、ネットワーク通信はソフトウェア開発に不可欠な部分となっています。 C# では通常、データ送信のセキュリティ、ネットワーク接続の安定性など、ネットワーク通信の問題が発生します。この記事では、C# における一般的なネットワーク通信とセキュリティの問題について詳しく説明し、対応する解決策とコード例を提供します。 1. ネットワーク通信の問題 ネットワーク接続の中断: ネットワーク通信プロセス中に、ネットワーク接続が中断される場合があります。

See all articles