socket_accept()
函數(shù)用于接受客戶端的連接請求。它通常用在服務(wù)器端,當(dāng)服務(wù)器監(jiān)聽一個端口等待客戶端連接時,可以使用 socket_accept()
函數(shù)來接受客戶端的連接。以下是一個簡單的示例,展示了如何使用 socket_accept()
函數(shù):
<?php
// 創(chuàng)建套接字
$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;
}
// 綁定套接字到地址和端口
$server_address = "127.0.0.1";
$server_port = 8080;
$result = socket_bind($server_socket, $server_address, $server_port);
if (!$result) {
echo "socket_bind() failed.\nReason: " . socket_strerror(socket_last_error($server_socket)) . "\n";
exit;
}
// 開始監(jiān)聽連接
$max_waiting_connections = 5;
$socket_listening = socket_listen($server_socket, $max_waiting_connections);
if (!$socket_listening) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($server_socket)) . "\n";
exit;
}
echo "Server is listening on port " . $server_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";
continue;
}
// 讀取客戶端發(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";
break;
}
// 處理客戶端請求(這里只是簡單地返回 "Hello from server!")
$response = "Hello from server!";
// 向客戶端發(fā)送響應(yīng)
socket_write($client_socket, $response);
// 關(guān)閉套接字連接
socket_close($client_socket);
}
// 關(guān)閉服務(wù)器套接字
socket_close($server_socket);
?>
這個示例中,服務(wù)器首先創(chuàng)建一個套接字,然后綁定到本地地址和端口。接著開始監(jiān)聽連接請求,當(dāng)有客戶端發(fā)起連接請求時,socket_accept()
函數(shù)會返回一個新的套接字,用于與客戶端進行通信。之后,服務(wù)器可以讀取客戶端發(fā)送的數(shù)據(jù),處理請求并向客戶端發(fā)送響應(yīng)。最后,記得關(guān)閉套接字連接。