1. 程式人生 > >Socket學習

Socket學習

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)回覆客戶端的資料。
這裡寫圖片描述