目次
PHPソケットプログラミングをわかりやすく紹介
TCP/IP 接続
ホームページ バックエンド開発 PHPチュートリアル PHPソケットプログラミングの徹底解説_PHPチュートリアル

PHPソケットプログラミングの徹底解説_PHPチュートリアル

Jul 13, 2016 am 09:53 AM
php プログラミング

PHPソケットプログラミングをわかりやすく紹介

この記事では主にPHPソケットプログラミングを分かりやすく紹介しており、ソケットに関する関連知識やPHPソケットプログラミングのパッケージ内容について詳しく解説しています。必要な友達はそれを参照してください

ネットワーク技術の発展に伴い、TCP/IP、UDP、ソケットプログラミングという言葉をよく耳にするようになりました。そこで聞きたいのは:

1.TCP/IP、UDPとは何ですか?

2.ソケットはどこですか?

3.ソケットとは何ですか?

4.使えますか?

TCP/IP、UDPとは何ですか?

TCP/IP (Transmission Control Protocol/Internet Protocol) は、ワイドエリアネットワーク (WAN) 用に設計された業界標準プロトコルセットです。

UDP(User Data Protocol、User Datagram Protocol)は、TCPに相当するプロトコルです。これは、TCP/IP プロトコル スイートのメンバーです。

これらのプロトコルの関係を示した図がこれです。

TCP/IPプロトコルスイートには、トランスポート層、ネットワーク層、リンク層が含まれます。これで、TCP/IP と UDP の関係がわかりました。

ソケットはどこですか?

図 1 では、Socket の影が見えませんが、それはどこにあるのでしょうか? 写真を使って話しましょう。一目瞭然です。

ソケットがここにあることがわかりました。

ソケットとは何ですか?

ソケットは、アプリケーション層とTCP/IPプロトコルファミリー間の通信のための中間ソフトウェア抽象化層です。インターフェースのセットです。設計モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠し、ユーザーにとっては一連の単純なインターフェイスだけで、指定されたプロトコルを満たすように Socket がデータを編成できます。

使えますか?

先人たちは私たちのために多くのことをしてくれて、ネットワーク間の通信ははるかに簡単になりましたが、結局のところ、やるべきことはまだたくさんあります。以前ソケットプログラミングについて聞いたとき、比較的高度なプログラミング知識だと思っていましたが、ソケットプログラミングの動作原理を理解すれば、その謎は解けます。

人生の一場面。友人に電話したい場合は、最初にその番号をダイヤルします。呼び出し音が聞こえたら、友人は電話に出ます。この時点で、あなたと友人は接続され、通話することができます。通話が終了したら電話を切って会話を終了します。 TCP/IP プロトコル ファミリは人生の中で誕生したのかもしれませんが、必ずしもそうではありません。

サーバー側から始めましょう。サーバーはまずソケットを初期化し、次にポートにバインドし、ポートをリッスンし、accept を呼び出してブロックし、クライアントが接続するのを待ちます。このとき、クライアントがSocketを初期化してからサーバーに接続(connect)すると、接続に成功するとクライアントとサーバー間の接続が確立されます。クライアントがデータ要求を送信し、サーバーが要求を受信して​​処理し、次に応答データをクライアントに送信し、クライアントがデータを読み取り、最後に接続を閉じて対話が終了します。

ソケット関連機能:

------------------------------------------------- - --------------------------------------

socket_accept() はソケット接続を受け入れます

socket_bind() はソケットを IP アドレスとポートにバインドします

Socket_clear_error()はソケットエラーまたは最後のエラーコードをクリアします

socket_close()はソケットリソースを閉じます

socket_connect()はソケット接続を開始します

Socket_create_listen() は、指定されたポートでリッスンするソケットを開きます

Socket_create_pair() は、区別できないソケットのペアを配列に生成します

Socket_create() はソケットを生成します。これはソケットのデータ構造を生成するのと同等です

socket_get_option() ソケットオプションを取得します

Socket_getpeername() リモートの同様のホストのIPアドレスを取得します

socket_getsockname() ローカルソケットのIPアドレスを取得します

socket_iovec_add() は、新しいベクトルを分散/集約配列に追加します

socket_iovec_alloc() この関数は、送信、受信、読み取り、書き込みが可能な iovec データ構造を作成します

socket_iovec_delete()は割り当てられたiovecを削除します

socket_iovec_fetch()は、指定されたiovecリソースのデータを返します

socket_iovec_free() は iovec リソースを解放します

Socket_iovec_set()はiovecデータの新しい値を設定します

Socket_last_error() は現在のソケットの最後のエラーコードを取得します

socket_listen() は、指定されたソケットからのすべての接続をリッスンします

Socket_read()は指定された長さのデータを読み込みます

Socket_readv() は分散/集約配列からデータを読み取ります

socket_recv()はソケットからキャッシュへのデータを終了します

Socket_recvfrom() は、指定されたソケットからデータを受け取ります。指定されていない場合、デフォルトで現在のソケットが使用されます。

socket_recvmsg()はiovecからメッセージを受け取ります

socket_select() 複数選択

socket_send() この関数は接続されたソケットにデータを送信します

socket_sendmsg() メッセージをソケットに送信します

socket_sendto() は、指定されたアドレスのソケットにメッセージを送信します

Socket_set_block() はソケットをブロックモードに設定します

Socket_set_nonblock() ソケットをノンブロックモードに設定します

socket_set_option() ソケットオプションを設定します

socket_shutdown() この関数を使用すると、読み取り、書き込み、または指定されたソケットを閉じることができます

socket_strerror()は、指定されたエラー番号を持つ詳細なエラーを返します

socket_write() はソケットキャッシュにデータを書き込みます

socket_writev() は分散/集約配列にデータを書き込みます

事例1: ソケット通信のデモンストレーション

サーバー側:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

//クライアントへの接続時にタイムアウトがないことを確認します

set_time_limit(0);

$ip = '127.0.0.1';

$ポート = 1935;

/*

+-------------------------------------------------

* @socket 通信の全プロセス

+-------------------------------------------------

* @socket_create

* @socket_bind

* @socket_listen

* @socket_accept

* @socket_read

* @socket_write

* @socket_close

+--------------------------------

*/

/*---------------- 以下の操作はすべてマニュアルに記載されています ------------------*/

if(($sock =socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) <0) {

echo "socket_create() が次の理由で失敗しました: ".socket_strerror($sock)."n";

}

if(($ret =ソケットバインド($sock,$ip,$port)) < 0) {

echo "socket_bind() が次の理由で失敗しました: ".socket_strerror($ret)."n";

}

if(($ret =socket_listen($sock,4)) < 0) {

echo "socket_listen() が次の理由で失敗しました: ".socket_strerror($ret)."n";

}

$count = 0;

する{

if (($msgsock =ソケット_accept($sock)) < 0) {

echo "socket_accept() が失敗しました: 理由: " 。socket_strerror($msgsock) ";

休憩;

} 他 {

//クライアントに送信

$msg="テストは成功しました!n";

socket_write($msgsock, $msg, strlen($msg));

echo "テストは成功しましたn";

$buf =ソケット_読み取り($msgsock,8192);

$talkback = "メッセージを受信しました: $bufn";

エコー $トークバック;

if(++$count >= 5){

休憩;

};

}

//エコー $buf;

socket_close($msgsock);

} while (true);

socket_close($sock);

?>

これはソケットのサーバー側のコードです。次に cmd を実行し、独自のプログラムのストレージ パスに注意してください。

応答はありません。サーバー プログラムが実行を開始し、ポートがリッスンを開始しました。 netstat -ano を実行してポートのステータスを確認します。私のポートは 1935 です。

見て、ポートはすでに LISTENING 状態になっています。次に、クライアント プログラムを実行して接続するだけです。アップコード

?

これでクライアントがサーバーに接続されました。

ケース2:コードの詳細説明

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

エラー報告(E_ALL);

set_time_limit(0);

echo "

TCP/IP 接続

n";

$ポート = 1935;

$ip = "127.0.0.1";

/*

+-------------------------------------------------

* @socket はプロセス全体を接続します

+-------------------------------------------------

* @socket_create

* @socket_connect

* @socket_write

* @socket_read

* @socket_close

+--------------------------------

*/

$socket =ソケット_作成(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket < 0) {

echo "socket_create() が失敗しました: 理由: " 。socket_strerror($socket) 。

}その他{

「OK.n」をエコー;

}

echo "'$ip' ポート '$port' に接続しようとしています...n";

$result =socket_connect($socket, $ip, $port);

if ($result < 0) {

echo "socket_connect() failed.nReason: ($result) " 。socket_strerror($result) ";

}その他{

「接続OKn」をエコーし​​ます;

}

$in = "ホーン";

$in .= "初血";

$out = '';

if(!socket_write($socket, $in, strlen($in))) {

echo "socket_write() が失敗しました: 理由: " 。socket_strerror($socket) 。

}その他{

echo "情報はサーバーに正常に送信されました!n";

echo "送信されたコンテンツは次のとおりです:$in
";

}

while($out =socket_read($socket, 8192)) {

echo "サーバー応答メッセージを正常に受信しました!n";

echo "受け入れられたコンテンツは次のとおりです:",$out;

}

echo "ソケットを閉じます...n";

socket_close($socket);

「閉じる OKn」をエコーし​​ます;

?>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//いくつかの基本的な変数を設定します

$host = "192.168.1.99";

$ポート = 1234;

// タイムアウトを設定する

set_time_limit(0);

// ソケットを作成します

$socket =ソケット_create(AF_INET, SOCK_STREAM, 0) または die("Could not createocketn");

//ソケットをポートにバインドする

$result =socket_bind($socket, $host, $port) または die("ソケットにバインドできませんでした");

// リンクの監視を開始します

$result =socket_listen($socket, 3) または die("ソケットリスナーをセットアップできませんでした");

// 受信接続を受け入れます

//通信を処理するための別のソケット

$spawn =socket_accept($socket) または die("受信接続を受け入れられませんでした");

//クライアントからの入力を取得します

$input =socket_read($spawn, 1024) または die("入力n を読み取れませんでした");

//入力文字列をクリアします

$input = トリム($input);

//クライアント入力を処理し、結果を返します

$output = strrev($input) . "n";

socket_write($spawn, $output, strlen ($output)) または die("書き込めませんでした

出力");

//ソケットを閉じる

socket_close($spawn);

socket_close($socket);

各ステップの詳細な説明は次のとおりです:

1. 最初のステップは、Socket が実行されているサーバーの IP アドレスとポートを保存する 2 つの変数を作成することです。独自のサーバーとポートに設定できます (ポートは 1 ~ 65535 の数値にすることができます)。このポートが使用されていない場合に限ります。

コードは以下の通りです:

// 2つの変数を設定します

$host = "192.168.1.99";

$port = 1234;

2. サーバー側で set_time_out() 関数を使用すると、クライアントの接続を待機している間に PHP がタイムアウトしないようにすることができます。

コードは次のとおりです:

// タイムアウト期間

set_time_limit(0);

3. 前の内容に基づいて、今度は、socket_creat() 関数を使用してソケットを作成します。この関数は、後続のすべての関数で使用されるソケット ハンドルを返します。

コードは以下の通りです:

//ソケットを作成する

$socket =ソケット_create(AF_INET, SOCK_STREAM, 0) or die("作成できませんでした

ソケットン");

最初のパラメータ「AF_INET」はドメイン名を指定するために使用されます。

2番目のパラメータ「SOCK_STREM」は、作成されるソケットのタイプ(この例ではTCPタイプ)を関数に伝えます

したがって、UDP ソケットを作成したい場合は、次のコードを使用できます:

コードは次のとおりです:

//ソケットを作成する

$socket =ソケット_create(AF_INET, SOCK_DGRAM, 0) or die("作成できませんでした

ソケットン");

4. ソケットハンドルが作成されたら、次のステップは、それを指定したアドレスとポートにバインドすることです。これは、socket_bind() 関数を通じて実行できます。

コードは以下の通りです:

// 指定されたアドレスとポートにソケットをバインドします

$result =socket_bind($socket, $host, $port) or die("バインドできませんでした

ソケットン");

5. ソケットが作成され、ポートにバインドされたら、外部接続のリスニングを開始できます。PHP では、socket_listen() 関数を通じてリスニングを開始できます。数値 (この例では 2 番目のパラメーター: 3) を指定できます。 )

コードは以下の通りです:

// 接続の監視を開始します

$result =socket_listen($socket, 3) or die("ソケットをセットアップできませんでした

リスナー");

6. これまで、サーバーは基本的にクライアントからの接続要求を待つこと以外は何もしませんでしたが、クライアント接続が受信されると、socket_accept() 関数が機能し、接続要求を受信して​​別の A サブサーバーを呼び出します。クライアントとサーバーの間で情報を処理するためのソケット。

コードは以下の通りです:

//リクエストリンクを承認します

// 情報を処理するためにサブソケットを呼び出します

$spawn =socket_accept($socket) または die("受信を受け入れられませんでした

「接続」);

このサブソケットは、後続のクライアント/サーバー通信に使用できるようになります。

7. 接続が確立されると、サーバーはクライアントが何らかの入力情報を送信するのを待ちます。この情報はsocket_read()関数によって取得され、PHPの$input変数に代入されます。

コードは以下の通りです:

// クライアント入力を読み取ります

$input =socket_read($spawn, 1024) または die("入力n を読み取れませんでした");

?>

socker_read の 2 番目のパラメータは、読み取るバイト数を指定するために使用されます。

クライアントから取得するデータのサイズを制限するために使用できます。

注:socket_read 関数は、n、t、または

8. 次に、サーバーはクライアントから送信されたデータを処理する必要があります(この例では、処理にはクライアントへのデータの入力と返却のみが含まれます)。この部分は、socket_write()関数によって完了できます(通信によって行われます)。ソケット データストリームをクライアントに送り返すことが可能です)

コードは次のとおりです:

// クライアント入力を処理してデータを返す

$output = strrev($input) .

socket_write($spawn, $output, strlen ($output)) または die("書き込めませんでした

出力n");

9. 出力がクライアントに返されたら、socket_close()関数を通じて親/子のソケットを終了する必要があります

コードは次のとおりです:

// ソケットを閉じる

socket_close($spawn);

socket_close($socket);

http://www.bkjia.com/PHPjc/1000097.html

www.bkjia.com

tru​​e

技術記事 PHPソケットプログラミングを簡単に紹介するこの記事では、主にPHPソケットプログラミングを簡単に紹介し、ソケットの関連知識、PHPソケットプログラミングサンプルのパッケージ内容、必要な友達について詳しく説明します...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の 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:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

See all articles