請結合下圖 Socket 抽象層的位置來理解。 Socket 是應用層和 TCP/IP 協定族進行通訊的中間軟體抽象層,是一組介面。在設計模式中,就是一個門面模式,它把複雜的實作封裝在介面後面,而只提供了一組簡單的介面給使用者呼叫。在普遍的程式語言中,這些介面一般是 create、bind、listen、accept、write、read、close 和 connect 等等。
1.效果圖
2.程式碼
服務端:Server.php
<?php set_time_limit(0); // 去掉时间限制 ob_implicit_flush(); // 开启强制刷新 // 1. 创建Socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 2. 绑定端口和IP socket_bind($socket, '127.0.0.1', 11279); // 3. 端口监听 socket_listen($socket); echo 'Server is listening!' . PHP_EOL; // 4. accept阻塞进程 $connect = socket_accept($socket); // 直到有连接进入,accept才会返回 echo 'Client [' . $connect . '] is accessing...' . PHP_EOL; // 5. 交互 socket_write($connect, 'Welcome, visitor! Now you can send message to the server.' . PHP_EOL); while ($connect) { // 获取请求 $request = socket_read($connect, 1024); echo 'Client ['. $connect .'] message: ' . $request; // 关闭连接 if($request == "bye" . PHP_EOL){ socket_shutdown($connect); break; } // 发送响应 $response = 'Your sended message: ' . $request; socket_write($connect, $response); } // 6. 销毁Socket socket_close($socket);
客戶端:client.php
<?php // 1. 创建Socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 2. 建立连接 $result = socket_connect($socket, '127.0.0.1', 11279); if($result === false){ socket_close($socket); die('Socket connect failed: ' . socket_strerror(socket_last_error($socket))); } // 3. 交互 while($result){ // 获取响应 $response = socket_read($socket, 1024); echo $response; // 发送请求 $request = fgets(STDIN); socket_write($socket, $request, 1024); // 关闭连接 if($request == "bye" . PHP_EOL){ socket_shutdown($socket); break; } } // 4.销毁Socket socket_close($socket);
以上是PHP 結合實例認識什麼是Socket的詳細內容。更多資訊請關注PHP中文網其他相關文章!