要使用PHP的socket進(jìn)行通信,你需要?jiǎng)?chuàng)建一個(gè)TCP或UDP客戶端/服務(wù)器應(yīng)用程序。下面是一個(gè)簡(jiǎn)單的例子,展示了如何創(chuàng)建一個(gè)基本的TCP客戶端和服務(wù)器。
1. 創(chuàng)建一個(gè)TCP服務(wù)器:
<?php
// 服務(wù)器地址和端口
$host = '127.0.0.1';
$port = 8080;
// 創(chuàng)建socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
// 綁定地址和端口
socket_bind($socket, $host, $port);
// 監(jiān)聽(tīng)連接
socket_listen($socket, 3);
echo "Server is listening on $host:$port...\n";
// 接受客戶端連接
$client = socket_accept($socket);
if (!$client) {
echo "socket_accept() failed.\n";
exit();
}
// 讀取客戶端發(fā)送的數(shù)據(jù)
$input = socket_read($client, 2048);
echo "Received message: $input\n";
// 向客戶端發(fā)送響應(yīng)
$response = "Hello from server!\n";
socket_write($client, $response);
// 關(guān)閉連接
socket_close($client);
socket_close($socket);
?>
2. 創(chuàng)建一個(gè)TCP客戶端:
<?php
// 服務(wù)器地址和端口
$host = '127.0.0.1';
$port = 8080;
// 創(chuàng)建socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
// 連接到服務(wù)器
socket_connect($socket, $host, $port);
// 向服務(wù)器發(fā)送數(shù)據(jù)
$message = "Hello from client!\n";
socket_write($socket, $message);
// 讀取服務(wù)器發(fā)送的響應(yīng)
$response = socket_read($socket, 2048);
echo "Received response: $response\n";
// 關(guān)閉連接
socket_close($socket);
?>
3. 創(chuàng)建一個(gè)UDP客戶端和服務(wù)器:
UDP服務(wù)器:
<?php
// 服務(wù)器地址和端口
$host = '127.0.0.1';
$port = 8080;
// 創(chuàng)建socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (!$socket) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
// 綁定地址和端口
socket_bind($socket, $host, $port);
echo "Server is listening on $host:$port...\n";
// 接收客戶端數(shù)據(jù)
$data = socket_read($socket, 2048);
$sender = socket_getpeername($socket);
echo "Received message from $sender: $data\n";
// 向客戶端發(fā)送響應(yīng)
$response = "Hello from server!\n";
socket_write($socket, $response, strlen($response));
// 關(guān)閉連接
socket_close($socket);
?>
UDP客戶端:
<?php
// 服務(wù)器地址和端口
$host = '127.0.0.1';
$port = 8080;
// 創(chuàng)建socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (!$socket) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit();
}
// 向服務(wù)器發(fā)送數(shù)據(jù)
$message = "Hello from client!\n";
$length = strlen($message);
socket_write($socket, $message, $length);
// 讀取服務(wù)器發(fā)送的響應(yīng)
$data = socket_read($socket, 2048);
echo "Received response: $data\n";
// 關(guān)閉連接
socket_close($socket);
?>
運(yùn)行這些腳本,首先啟動(dòng)服務(wù)器,然后啟動(dòng)客戶端。你應(yīng)該看到服務(wù)器和客戶端之間的通信。根據(jù)需要修改地址、端口和數(shù)據(jù)。