php socket實現長鏈結

2021-06-25 14:19:54 字數 4966 閱讀 6682

一、socket 簡介

1、socket只不過是乙個資料結構。

2、使用這個socket資料結構去開始乙個客戶端和伺服器之間的會話。

3、伺服器是一直在監聽準備產生乙個新的會話。當乙個客戶端連線伺服器,它就開啟伺服器正在進行監聽的乙個埠進行會話。

4、伺服器端接受客戶端的連線請求,那麼就進行一次迴圈。現在這個客戶端就能夠傳送資訊到伺服器,伺服器也能傳送資訊給客戶端。

二、socket 變數

產生乙個socket,你需要三個變數:乙個協議、乙個socket型別和乙個公共協議型別。

1、協議

af_inet  

//產生socket的協議,使用tcp或udp來傳輸,用在ipv4的位址

af_inet6  

//產生socket的協議,使用tcp或udp來傳輸,用在ipv6的位址

af_unix  

//本地協議,使用在unix和linux系統上,它很少使用,一般都是當客戶端和伺服器在同一臺機器上的時候使用

2、socket型別

sock_stream  

//這個協議是按照順序的、可靠的、資料完整的基於位元組流的連線。這是乙個使用最多的socket型別,這個socket是使用tcp來進行傳輸。

sock_dgram  

//這個協議是無連線的、固定長度的傳輸呼叫。該協議是不可靠的,使用udp來進行它的連線。

sock_seqpacket  

//這個協議是雙線路的、可靠的連線,傳送固定長度的資料報進行傳輸。必須把這個包完整的接受才能進行讀取。

sock_raw  

//這個socket型別提供單一的網路訪問,這個socket型別使用icmp公共協議。(ping、traceroute使用該協議)

sock_rdm  

//這個型別是很少使用的,在大部分的作業系統上沒有實現,它是提供給資料鏈路層使用,不保證資料報順序

3、公共協議

icmp  

//網際網路控制訊息協議,主要使用在閘道器和主機上,用來檢查網路狀況和報告錯誤資訊

udp  

//使用者資料報文協議,它是乙個無連線,不可靠的傳輸協議

tcp  

//傳輸控制協議,這是乙個使用最多的可靠的公共協議,它能保證資料報能夠到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新傳送出錯資料報。

三、socket函式

1、socket_create

作用:產生乙個socket,相當於產生乙個socket的資料結構

用法:socket_create ( int domain, int type, int protocol )

引數:domain,協議;type,型別;protocol,公共協議

返回:socket resource on success, or false on error

2、socket_bind

作用:把socket繫結在乙個ip位址和埠上

用法:socket_bind ( resource socket, string address [, int port] )

引數:socket,socket resource;address,ip位址;port,埠

返回:boolean

3、socket_accept

作用:接受乙個socket連線

用法:socket_accept ( resource socket )

引數:socket,socket resource

返回:returns a new socket resource on success, or false on error.

4、socket_connect()

作用:開始乙個socket連線

用法:socket_connect ( resource socket, string address [, int port] )

引數:socket,socket resource;address,ip位址;port,埠

返回:boolean

5、socket_listen

作用:監聽由指定socket的所有連線

用法:socket_listen ( resource socket [, int backlog] )

引數:socket,socket resource;

返回:boolean

6、socket_read

作用:讀取指定長度的資料

用法:socket_read ( resource socket, int length [, int type] )

引數:socket,socket resource;length,字元長度;type,php_binary_read |php_normal_read

返回:string

7、socket_write

作用:寫資料到socket快取

用法:socket_write ( resource socket, string buffer [, int length] )

引數:socket,socket resource;buffer,字元;length,字元長度;

返回:boolean

8、socket_send()

作用:這個函式傳送資料到已連線的socket

用法:socket_send ( resource socket, string buf, int len, int flags )

引數:socket,socket resource;buf,字元;len,字元長度;

返回:boolean

9、socket_last_error

作用:獲取當前socket的最後錯誤**

用法:socket_last_error ( [resource socket] )

引數:socket,socket resource;

返回:int

10、socket_strerror

作用:返回指定錯誤號的詳細錯誤

用法:socket_strerror ( int errno )

引數:errno,socket_last_error no;

返回:string

11、socket_close

作用:關閉乙個socket資源

用法:socket_close ( [resource socket] )

引數:socket,socket resource;

返回:null

四、使用說明

確認開啟socket方法

a、編輯php.ini檔案,去掉 extension=php_sockets.dll 前面的注釋:

b、**來載入擴充套件庫

檢視原始碼

複製到剪下板

列印幫助

if(!

extension_loaded

('sockets'

))else

}  

五、socket程式設計

1、伺服器端

功能:

<?php

set_time_limit(0);

$host="127.0.0.1";

$port=80;

//建立乙個連線

$socket=socket_create(af_inet,sock_stream,sol_tcp)or die("cannot create socket\n");

//繫結socket到埠

$result=socket_bind($socket,$host,$port) or die("cannot bind port to socket\n");

//開始監聽這個埠

$result=socket_listen($socket,4) or die("could not set up socket listen\n");

do //讀取客戶端傳送過來的資訊

$input=socket_read($msgsock,1024) or die("cannot read input\n");

$input=trim($input);

$output=strrev($input)."順序反過來了吧111\n";

//對接收到的資訊進行處理,然後返回到客戶端

socket_write($msgsock,$output,strlen($output)) or die("cannot write");

socket_close($msgsock);

if($input == 'q')break;

}while (true);

//關閉socket連線

socket_close($socket);

2、客戶端

功能:

<?php

header("content-type: text/html; charset=utf-8");

set_time_limit(0);

$host="127.0.0.1";

$port=84;

$res = $_get['aa'];

//建立乙個socket

$socket=socket_create(af_inet,sock_stream,sol_tcp)or die("cannot create socket\n");

$conn=socket_connect($socket,$host,$port) or die("cannot connect server\n");

if($conn)

socket_write($socket,$res) or die("cannot write data\n");

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

if($buffer)

socket_close($socket);

?>

長鏈結轉短鏈結

將長鏈結轉化成短鏈結 風之子 2012 短鏈 短位址 short url 杭州.mark 演算法大致如下 1 將長 md5生成32位簽名串,分為4段,每段8個位元組 2 對這四段迴圈處理,取8個位元組,將他看成16進製制串與0x3fffffff 30位1 與操作,即超過30位的忽略處理 3 這30位...

TCP長鏈結和短鏈結

tcp在真正的讀寫操作之前,server與client之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立通過三次握手,釋放則需要四次握手,所以說每個連線的建立都是需要資源消耗和時間消耗的。tcp通訊的整個過程,如下圖 模擬一種tcp短連線的情況 1.cli...

TCP 短鏈結 和 長鏈結

tcp在真正的讀寫操作 資料傳輸 之前,server與client之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立通過三次握手,釋放則需要四次握手,所以說每個連線的建立都是需要資源消耗和時間消耗的。tcp通訊的整個過程,如下圖 模擬一種tcp短連線的情況...