Socket學習
阿新 • • 發佈:2018-12-30
socket(注入tcp協議)
IP地址 + 協議(TCP/UDP) + 埠 == 我們稱之為套接字
有了“套接字”,我們就能區分誰是誰。
我們要注意幾點:
1、首先我們的網要通。寬頻欠費了,你還想連線到外面去那是不可能的。
2、就像剛才打電話那樣。不管你是接電話的人(服務端),還是打電話的人(客戶端),你都得有個“電話機”(很多人以為只要服務端有電話機)
3、接電話的人(服務端)可以同時接好幾個人電話
4、服務端電話機一直開機的(比如:socket需要等待客戶端連線),一旦有人打進了才可以接。
5、通過區號+電話號碼。這就是套接字。中轉機才能區分你到底要和哪個人通話。
6、你借到騷擾電話會怎樣?直接掛機或罵街。這就是協議在其中發揮的作用。(不要告訴我你打誰的電話都能交談甚歡)
<?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); // 購買電話機
socket_bind($socket,'127.0.0.1',9090); // 繫結電話機
socket_listen($socket,5); // 開機
while(true){
$client = socket_accept($socket); // 有人打電話進來
$buf = socket_read($client,1024); // 一次讀取1024的長度
echo $buf;
// 回覆
socket_write($client ,'hello socket');
socket_close($client); // 關掉客戶端
}
socket_close($socket); // 關機
我們用php命令模式執行這個server.php,然後瀏覽器訪問http://127.0.0.1:9090/
,控制器會有如下列印:
這其實是HTTP協議的內容,是程式碼中echo $buf;
輸出的。
client.php:
<?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); // 購買電話機
socket_connect($socket,'127.0.0.1' ,9090);
socket_write($socket,'I am client');
$buf = socket_read($socket,1024);
echo $buf;
socket_close($socket);
同樣命令模式執行這個檔案,發現輸出了hello socket
這樣的字串,這個其實是服務端(server.php)回覆客戶端的資料。