**socket相關函數:**
\----------------------------------------------------------------------------------------------
socket\_accept() 接受一個Socket連接
socket\_bind() 把socket綁定在一個IP地址和端口上
socket\_clear\_error() 清除socket的錯誤或者最后的錯誤代碼
socket\_close() 關閉一個socket資源
socket\_connect() 開始一個socket連接
socket\_create\_listen() 在指定端口打開一個socket監聽
socket\_create\_pair() 產生一對沒有區別的socket到一個數組里
socket\_create() 產生一個socket,相當于產生一個socket的數據結構
socket\_get\_option() 獲取socket選項
socket\_getpeername() 獲取遠程類似主機的ip地址
socket\_getsockname() 獲取本地socket的ip地址
socket\_iovec\_add() 添加一個新的向量到一個分散/聚合的數組
socket\_iovec\_alloc() 這個函數創建一個能夠發送接收讀寫的iovec數據結構
socket\_iovec\_delete() 刪除一個已經分配的iovec
socket\_iovec\_fetch() 返回指定的iovec資源的數據
socket\_iovec\_free() 釋放一個iovec資源
socket\_iovec\_set() 設置iovec的數據新值
socket\_last\_error() 獲取當前socket的最后錯誤代碼
socket\_listen() 監聽由指定socket的所有連接
socket\_read() 讀取指定長度的數據
socket\_readv() 讀取從分散/聚合數組過來的數據
socket\_recv() 從socket里結束數據到緩存
socket\_recvfrom() 接受數據從指定的socket,如果沒有指定則默認當前socket
socket\_recvmsg() 從iovec里接受消息
socket\_select() 多路選擇
socket\_send() 這個函數發送數據到已連接的socket
socket\_sendmsg() 發送消息到socket
socket\_sendto() 發送消息到指定地址的socket
socket\_set\_block() 在socket里設置為塊模式
socket\_set\_nonblock() socket里設置為非塊模式
socket\_set\_option() 設置socket選項
socket\_shutdown() 這個函數允許你關閉讀、寫、或者指定的socket
socket\_strerror() 返回指定錯誤號的詳細錯誤
socket\_write() 寫數據到socket緩存
socket\_writev() 寫數據到分散/聚合數組
案例:
服務端
<?php
//確保在連接客戶端時不會超時
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
+-------------------------------
* @socket通信整個過程
+-------------------------------
* @socket_create
* @socket_bind
* @socket_listen
* @socket_accept
* @socket_read
* @socket_write
* @socket_close
+--------------------------------
*/
/*---------------- 以下操作都是手冊上的 -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
echo "socket_create() 失敗的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
echo "socket_bind() 失敗的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
echo "socket_listen() 失敗的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
break;
} else {
//發到客戶端
$msg ="測試成功!\n";
socket_write($msgsock, $msg, strlen($msg));
echo "測試成功了啊\n";
$buf = socket_read($msgsock,8192);
$talkback = "收到的信息:$buf\n";
echo $talkback;
if(++$count >= 5){
break;
};
}
//echo $buf;
socket_close($msgsock);
} while (true);
socket_close($sock);
?>