一、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短連線的情況...