PHP SOCKET 技術研究

來源:互聯網
上載者:User

今天試著寫一個 PHP 與 C 語言通過socket通訊的程式,看過PHP手冊,發現有好幾種方式可以建立socket 用戶端.

1、通過 fsockopen() 建立socket串連,然後用 用fputs() 發送訊息,用 fgets() 接收訊息。

2、通過 socket_create() 建立 socket 串連,然後用 socket_send() or socket_write() 發送訊息,用 socket_recv() or socket_read() 發送訊息。

很奇怪,我在手冊上看到了這樣一段話"本擴充模組是實驗性的。該模組的行為,包括其函數的名稱以及其它任何關於此模組的文檔可能會在沒有通知的情況下隨 PHP 以後的發布而改變。我們提醒您在使用本擴充模組的同時自擔風險。" 看來 php4.0 socket通訊還不是完全穩定。

今天我寫的用戶端要與服務端做兩次通訊,我用上面這個方法都寫了一個用戶端程式,發現當僅僅就一次通訊的時候,也就是PHP用戶端發送一次訊息,然後接收返回訊息,就關閉串連。這兩種方法都能正確快速的實現功能,但當做兩次通訊時,卻有明顯的差別,第一種方法第一次通訊特別快就結束了,這個我可以通過服務端的輸出看出來,但是第二次通訊要等上好幾分鐘才能結束,我試了好幾次都這樣,我不太清楚我的程式哪裡出錯了,還是這個方式串連就是有問題,但是第二種方法做這兩次通訊卻很快,正確!完成的非常的。

最後我根據 第二種情況寫了一個 class

////////////////////////////// File Description //////////////////////////////////////////
// Class Name : socket
// Version : V1.0
// Functional Outline : create socket,and send message to server
// Revision history : 2004/12/15 First version created
// Current : 2004/12/15 Liu Yongsheng
//////////////////////////////////////////////////////////////////////////////////////////
class socket{
var $socket; //socket 控制代碼
var $sendflag = ">>>";
var $recvflag = "<<<";
var $response;
var $debug = 1;
function socket($hostname,$port){
$address = gethostbyname($hostname);
$this->socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$result = socket_connect($this->socket,$address,$port);
if($this->debug == 1){
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "<br>";
} else{
echo "connect OK.<br>";
}
}
}
function sendmsg($msg){
socket_write($this->socket,$msg,strlen($msg));
$result = socket_read($this->socket,100);
$this->response = $result;
if($this->debug == 1){
printf("<font color=#CCCCCC>%s $msg</fon><br>",$this->sendflag);
printf("<font color=blue>%s $result</font><br>",$this->recvflag);
}
return $result;
}
function close(){
socket_close($this->socket);
}

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.