php 例項說明 socket通訊機制

2022-07-17 23:12:16 字數 3101 閱讀 8673

張映 發表於 2010-04-24

一,socket是什麼

什麼是socket 所謂socket通常也稱作"套接字",用於描述ip位址和埠,是乙個通訊鏈的控制代碼。應用程式通常通過"套接字"向網路發出請求或者應答網路請求。說白了就是一種通訊機制。它類似於銀行,電信啊這些部分的**客服部門。你打**的時候,那邊會分配置乙個人回答你的問題,客服部門就相當於socket的伺服器端了,你這邊呢就相當於客戶端了,在和你通話結束前,如果有人在想找和你通話的那個說話,是不可能的,因為你在和他通訊,當然客服部門的**交換機也不會重複分配。

下面我將舉例子來說明一下,socket是怎麼工作的。如果你是基於應用層開發的人員並不一定要理解原理,但是能知道那是更好了。網上有關於socket的php api。下下來用就行了。

二,socket伺服器server.php

檢視複製列印?

<?php   

// 建立server端socket  

$tcp = getprotobyname("tcp");  

$socket = socket_create(af_inet, sock_stream, $tcp);  

socket_bind($socket, '127.0.0.1', 10008);       //繫結要監聽的埠  

socket_listen($socket);       //監聽埠  

//初始化乙個資料,和客戶端通訊  

$buffer = "connect";  

while (true) else else   

// 從客戶端取得資訊  

while ($data = @socket_read($connection, 1024, php_normal_read))   

}  socket_close($connection);  

//關閉 socket  

printf("closed the socket\n");  

}  ?>  

三,socket客戶端client.php

檢視複製列印?

<?php   

// 建立客戶端的socet連線  

$socket = socket_create(af_inet, sock_stream, sol_tcp);  

$connection = socket_connect($socket, '127.0.0.1', 10008);    //連線伺服器端socket  

while ($buffer = @socket_read($socket, 1024, php_normal_read))  else   

//伺服器端收到資訊後,給於的回應資訊  

while ($buffer = socket_read($socket, 1024, php_normal_read))          

}  }  

?>  

四,通訊機制的乙個(不考慮等待時間結束自動關閉socket)

socket互動流程

簡單說明一下,在說明前我要說一下,為什麼要用php命令來執行伺服器和客戶端,客戶端你用fsockopen,這樣就在流覽器上訪問了,不至少於會連線超時。為什麼會這樣呢,因為你建立乙個socket時,它會不斷的去監聽客戶有沒有要來連線。

socket通訊的建立要二個socket通道,乙個是伺服器端建立的,乙個是客戶端建立的。

1號線,伺服器建立乙個socket通道,並將資訊放到快取,等待客戶端連線

2號線,客戶端建立乙個socket通道,並連線伺服器端,取得伺服器端的資訊進行通訊,將要傳的資訊送入通道

3號線,伺服器端從客戶端取得資訊,並告訴客戶端,資訊我已經收到了。將要傳的資訊送入通道

4號線,客戶端從伺服器端取得確認資訊

到此乙個通訊就完全建立了,資料傳輸完畢後,伺服器端會斷開socket通訊,具體操作如下

1,執行socket伺服器端

[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php

interactive mode enabled

這一點做了那些工作呢

a,監聽了乙個10008埠

[zhangy@blackghost ~]$ netstat -an |grep listen |grep 10008

tcp        0      0 127.0.0.1:10008         0.0.0.0:*               listen

[zhangy@blackghost ~]$

b,將資訊送到快取裡面

$buffer = "connect";看上面的**2,執行socket客戶端[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/client.php

interactive mode enabled

buffer data: connect

writing to socket

sent to server: some data

response from server was:information received3,回到伺服器端[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php

interactive mode enabled

socket connected

send data to client

wrote to socket

buffer: some data

closed the socket

關於上圖純屬個人理解,如有不對,請大俠們指教。

php 例項說明 socket通訊機制

一.socket是什麼 什麼是socket 所謂socket通常也稱作 套接字 用於描述ip位址和埠,是乙個通訊鏈的控制代碼。應用程式通常通過 套接字 向網路發出請求或者應答網路請求。說白了就是一種通訊機制。它類似於銀行,電信啊這些部分的 客服部門。你打 的時候,那邊會分配置乙個人回答你的問題,客服...

php 例項說明 socket通訊機制

一,socket是什麼 什麼是socket 所謂socket通常也稱作 套接字 用於描述ip位址和埠,是乙個通訊鏈的控制代碼。應用程式通常通過 套接字 向網路發出請求或者應答網路請求。說白了就是一種通訊機制。它類似於銀行,電信啊這些部分的 客服部門。你打 的時候,那邊會分配置乙個人回答你的問題,客服...

socket通訊例項 GUI

效果展示 專案 客戶端 public class client extends jframe implements runnable catch ioexception e 判斷連線是否建立 if socket.isconnected 初始客戶端 private void initclient 訊息...