PHP TCP 示例 - 構建網絡連接程序
開發網絡連接程序需要掌握一些網絡編程技術,例如TCP網絡通信協議。TCP協議提供了一個可靠的網絡連接,它能夠確保數據包的傳輸順序和可靠性。在PHP中,我們可以使用socket函數來實現TCP網絡編程。通過socket,我們可以建立客戶端和服務器端之間的網絡連接,實現數據交換和通信。
下面,我們將介紹兩個基本的PHP TCP示例。第一個示例是創建一個TCP客戶端程序,用于向遠程服務器發送數據并接收響應。第二個示例我們將介紹如何創建一個TCP服務器程序,用于接收客戶端發來的請求并返回響應。
示例1 - TCP客戶端
以下是一個簡單的示例代碼,它創建了一個TCP客戶端程序。該程序將連接到指定的服務器和端口,并發送一些數據到服務器,然后等待響應。
在上面的代碼中,首先使用
接下來,程序使用
示例2 - TCP服務器
以下是一個簡單的示例程序,它創建了一個TCP服務器。該服務器將監聽指定的端口,并等待客戶端的連接請求。當客戶端連接到服務器后,服務器將接收客戶端發送的數據,并返回響應。
在上面的代碼中,首先使用
服務器進入while循環,等待客戶端連接請求。當客戶端發送連接請求時,
在接收客戶端發送的請求后,服務器使用
參考資料:
- https://www.php.net/manual/en/function.socket-create.php
- https://www.php.net/manual/en/function.socket-connect.php
- https://www.php.net/manual/en/function.socket-send.php
- https://www.php.net/manual/en/function.socket-recv.php
- https://www.php.net/manual/en/function.socket-bind.php
- https://www.php.net/manual/en/function.socket-accept.php
- https://www.php.net/manual/en/function.socket-read.php
- https://www.php.net/manual/en/function.socket-write.php
- https://www.php.net/manual/en/function.socket-listen.php
開發網絡連接程序需要掌握一些網絡編程技術,例如TCP網絡通信協議。TCP協議提供了一個可靠的網絡連接,它能夠確保數據包的傳輸順序和可靠性。在PHP中,我們可以使用socket函數來實現TCP網絡編程。通過socket,我們可以建立客戶端和服務器端之間的網絡連接,實現數據交換和通信。
下面,我們將介紹兩個基本的PHP TCP示例。第一個示例是創建一個TCP客戶端程序,用于向遠程服務器發送數據并接收響應。第二個示例我們將介紹如何創建一個TCP服務器程序,用于接收客戶端發來的請求并返回響應。
示例1 - TCP客戶端
以下是一個簡單的示例代碼,它創建了一個TCP客戶端程序。該程序將連接到指定的服務器和端口,并發送一些數據到服務器,然后等待響應。
<?php // 創建socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$socket) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; exit(); } // 連接到服務器 $host = "192.168.0.100"; $port = 1234; $result = socket_connect($socket, $host, $port); if ($result === false) { echo "socket_connect() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit(); } // 發送數據到服務器 $message = "Hello, Server!"; $len = strlen($message); $bytes_sent = socket_send($socket, $message, $len, 0); if ($bytes_sent === false) { echo "socket_send() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit(); } // 接收響應從服務器 $bytes_received = socket_recv($socket, $buf, 2048, 0); if ($bytes_received === false) { echo "socket_recv() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit(); } // 關閉連接 socket_close($socket); // 顯示從服務器接收的響應 echo "Received: " .$buf; ?>
在上面的代碼中,首先使用
socket_create()
函數創建一個TCP套接字,并指定協議族為AF_INET。然后使用socket_connect
函數連接到指定的服務器和端口。在連接成功后,使用socket_send
函數發送數據到服務器。接下來,程序使用
socket_recv
函數接收從服務器返回的響應。最后,使用socket_close
函數關閉TCP連接。示例2 - TCP服務器
以下是一個簡單的示例程序,它創建了一個TCP服務器。該服務器將監聽指定的端口,并等待客戶端的連接請求。當客戶端連接到服務器后,服務器將接收客戶端發送的數據,并返回響應。
<?php // 創建socket $server_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$server_socket) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; exit(); } // 綁定到指定端口 $host = "127.0.0.1"; $port = 1234; $result = socket_bind($server_socket, $host, $port); if (!$result) { echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($server_socket)) . "\n"; exit(); } // 開始監聽 $result = socket_listen($server_socket); if (!$result) { echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($server_socket)) . "\n"; exit(); } echo "Server started. Listening to port $port...\n"; // 循環接收客戶端連接 while (true) { // 等待客戶端連接 $client_socket = socket_accept($server_socket); if (!$client_socket) { echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($server_socket)) . "\n"; break; } // 從客戶端接收數據 $buf = socket_read($client_socket, 2048); if ($buf === false) { echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($server_socket)) . "\n"; break; } // 發送響應給客戶端 $response = "Hello, Client!"; socket_write($client_socket, $response, strlen($response)); // 關閉客戶端連接 socket_close($client_socket); } // 關閉服務器socket socket_close($server_socket); ?>
在上面的代碼中,首先使用
socket_create()
函數創建一個TCP套接字。然后使用socket_bind
函數將套接字綁定到指定的端口和IP地址。接下來,程序使用socket_listen
函數開始監聽指定的端口。服務器進入while循環,等待客戶端連接請求。當客戶端發送連接請求時,
socket_accept()
函數接受連接,并返回一個新的套接字用于與客戶端通信。在接收客戶端發送的請求后,服務器使用
socket_read
函數從客戶端讀取數據,并返回一個響應給客戶端。最后使用socket_close
函數關閉連接。服務器將一直監聽指定端口并等待客戶端連接請求,直到程序被終止。參考資料:
- https://www.php.net/manual/en/function.socket-create.php
- https://www.php.net/manual/en/function.socket-connect.php
- https://www.php.net/manual/en/function.socket-send.php
- https://www.php.net/manual/en/function.socket-recv.php
- https://www.php.net/manual/en/function.socket-bind.php
- https://www.php.net/manual/en/function.socket-accept.php
- https://www.php.net/manual/en/function.socket-read.php
- https://www.php.net/manual/en/function.socket-write.php
- https://www.php.net/manual/en/function.socket-listen.php