如何在php中使用socket_accept接收連接

PHP
小樊
81
2024-09-26 23:25:49

在 PHP 中,使用 socket_accept() 函數(shù)可以接收來(lái)自客戶端的連接請(qǐng)求

  1. 創(chuàng)建一個(gè)套接字:
$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;
}
  1. 綁定套接字到地址和端口:
$server_address = "127.0.0.1";
$server_port = 8080;

$bind_result = socket_bind($server_socket, $server_address, $server_port);
if (!$bind_result) {
    echo "socket_bind() failed.\nReason: " . socket_strerror(socket_last_error($server_socket)) . "\n";
    exit;
}
  1. 開(kāi)始監(jiān)聽(tīng)連接請(qǐng)求:
$listen_result = socket_listen($server_socket, 5);
if (!$listen_result) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($server_socket)) . "\n";
    exit;
}
  1. 接受客戶端連接請(qǐng)求:
$client_socket = socket_accept($server_socket);
if (!$client_socket) {
    echo "socket_accept() failed.\nReason: " . socket_strerror(socket_last_error($server_socket)) . "\n";
    exit;
}
  1. 讀取并輸出客戶端發(fā)送的數(shù)據(jù):
$client_data = socket_read($client_socket, 1024);
if ($client_data === false) {
    echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($client_socket)) . "\n";
} else {
    echo "Received from client: " . $client_data . "\n";
}
  1. 向客戶端發(fā)送數(shù)據(jù):
$response = "Hello from server!";
socket_write($client_socket, $response);
  1. 關(guān)閉套接字連接:
socket_close($client_socket);
socket_close($server_socket);

將以上代碼片段組合在一起,即可實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 PHP Socket 服務(wù)器,使用 socket_accept() 函數(shù)接收客戶端連接請(qǐng)求。請(qǐng)注意,這僅是一個(gè)基本示例,實(shí)際應(yīng)用中可能需要考慮更多因素,例如錯(cuò)誤處理、多客戶端支持、安全性和性能優(yōu)化等。

0