php里面的socket编程,详解PHP Socket 编程过程
詳解PHP Socket 編程過程
作者:PHPYuan 時間:2019-03-13 03:41:20
概述
Socket用于進程間通信。進程間通信通?;诳蛻舳恕斩四P汀4藭r,客戶端—服務端是可以彼此交互的應用程序。客戶端和服務端之間的交互需要連接。Socket編程負責的就是為應用程序之間建立可進行交互的連接。
Socket變量
產生一個socket,你需要三個變量:一個是協議,一個socket類型和一個公共協議類型。協議
AF_INET//產生socket的協議,使用TCP或UDP來傳輸,使用IPV4的地址
AF_INET6//產生socket的協議,使用TCP或UDP來傳輸,用在IPV6的地址
AF_UNIX//本地協議,使用在unix和linux系統上,它很少使用,一般都是當客戶端和服務器在同一臺機器上的時候使用
Socket類型
SOCK_STREAM//這個協議是按照順序的、可靠的、數據完整的基于字節流的鏈接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。
SOCK_DGRAM//這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的鏈接。
SOCK_SEQPACKET//這個協議是雙線路的、可靠的鏈接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。
SOCK_RAW//這個socket類型提供單一的網絡訪問,這個socket類型使用ICMP協議。
SOCK_RDM//這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供數據鏈路層使用,不保證數據包順序。公共協議
ICMP//互聯網控制消息協議,主要使用在網關和主機上,在檢查網絡狀態和報告錯誤信息
UDP//用戶數據報文協議,它是一個無連接,不可靠的傳輸協議
TCP//傳輸控制協議,這是一個使用最多的可靠的公共協議,他能保證數據包能夠到達接管者那兒,如果在傳輸過程中發生錯誤,那么它將重新發送出錯數據包
Socket連接過程
根據連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟:服務器監聽,客戶端請求,連接確認。
(1)服務器監聽:是服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態。
(2)客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。
(3)連接確認:是指當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。
PHP socket內部源碼
PHP Socket模擬請求
當處理純文本的時候,fgets獲取最后一行字符后,foef函數返回的結果并不是TRUE。實際的運算過程如下:while()繼續循環。
fgets 獲取倒數第二行的字符串
feof返回false,進入下一次循環
fgets獲取最后一行數據
一旦fegets函數被調用,feof函數仍然返回的是false。所以繼續執行循環
fget試圖獲取另外一行,但實際結果是空的。實際代碼沒有意識到這一點,試圖處理另外根本不存在的一行,但fgets被調用了,feof放回的結果仍然是false
進入死循環
分享到:
<< 上一篇:怎樣判斷 Linux 內核版本是 “穩定的”? (2019-03-14 03:40)
>> 下一篇:在php中調用接口以及編寫接口(內附教程分享) (2019-03-13 03:41)
總結
以上是生活随笔為你收集整理的php里面的socket编程,详解PHP Socket 编程过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库索引 分区_数据库设计
- 下一篇: 6 volist双层数组_Javascr