服務端代碼server.php
<?php //創建socket套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); /** * 第一個參數說明: * AF_UNIX(本機通信) * AF_INET(TCP/IP – IPv4) * AF_INET6(TCP/IP – IPv6) * 第二個參數說明: * SOCK_STREAM(TCP流) * SOCK_DGRAM(UDP數據報) * SOCK_RAW(原始套接字) * 第三個參數說明: * 如果第二個參數選擇的是TCP,則傳遞SOL_TCP否則就SOL_UDP */ if (!$socket) { echo 'create socket error' . PHP_EOL; } else { echo 'create socket success' . PHP_EOL; } /** * 因為一臺主機可能存在多個 ip 地址,所以你需要指定你的 socket 監聽的是哪一個, * 常用的值為 127.0.0.1,或者是監聽所有地址 0.0.0.0, * 那么這里可能有人不明白了,127.0.0.1 和 0.0.0.0 有啥區別呢? * 127.0.0.1 只是一個回環地址,只能用于本機訪問,說白了就是自己玩自己的,因為這個 ip 不對外部開放,所以別人也就無法訪問這個地址, * 所以如果你的服務器地址設置為 127.0.0.1,別人想要訪問,只能去屎吧。 * 0.0.0.0 嚴格來說不算是一個 ip 地址,它的意思是本機的所有 IP 地址,都是我的,哈哈。 */ //綁定ip和端口 $addr = '127.0.0.1'; $port = 8080; if (socket_bind($socket, $addr, $port)) { echo 'bind addr success' . PHP_EOL; } else { echo 'bind addr error' . PHP_EOL; } //監聽套接字 if (!socket_listen($socket)) { echo 'listen socket error' . PHP_EOL; } else { echo 'listen socket success' . PHP_EOL; } //接受客戶端連接 $client = socket_accept($socket); if (!$client) { echo 'socket_accept error' . PHP_EOL; } else { echo 'socket_accept success' . PHP_EOL; //接受客戶端返回內容 while (true) { //第一個參數是客戶端套接字 第二個參數從socket中獲取的數據 第三個參數是設置長度最多為 len 字節的數據將被接收。 $bytesNum = socket_recv($client, $buffer, 100, 0); if (!$bytesNum) { echo "socket_recv failed" . PHP_EOL; exit(1); } else { echo "content from client:" . $buffer . PHP_EOL; } } }
客戶端代碼client.php
<?php //創建socket套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //連接套接字 if (!socket_connect($socket, '127.0.0.1', 8080)) { echo 'socket connect error' . PHP_EOL; exit(1); } else { while (true) { //阻塞進程獲取輸入內容 $data = fgets(STDIN); //如果用戶輸入quit,那么退出程序 這里要去除下空格 因為回車會造成換行符 if (trim($data) == 'quit') { socket_close($socket); break; } //發送數據給服務端 socket_write($socket, $data); } }
這里先運行php server.php,然后運行php client.php,然后輸入內容,服務端就能接受到了。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://phpxs.com/post/7236/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料
查 看2022高級編程視頻教程免費獲取