2012-06-14 28 views
2

以下是我的套接字連接請求和響應順序。如何閱讀php套接字連接響應?

$socket = socket_create(AF_INET, SOCK_STREAM, 0); 
$connection = socket_connect($socket, $Host, $Port); 
$Md5CheckSum = md5($msg); 
$WillWait = 'SOAP '. $Md5CheckSum. ' WILL_WAIT'."\n"; 
socket_write($socket,$WillWait);       
socket_write($socket,$msg); 
socket_write($socket, SoapSender::$TERM_CHAR); 
sleep(1); 
$buf = socket_read($socket, 2048); 
//socket_write($socket,"&\r\n"); 
echo "$buf\n"; 

請有人可以告訴我如何讀取最後socket_write請求後收到的響應。我一整天都在搜索這個答案,但一直沒能通過Google找到任何幫助。

非常感謝您的時間。

+1

你在'$ buf'中收到了什麼? –

+0

[如何在PHP中創建多個socket_write和socket_recv調用?](http://stackoverflow.com/questions/11028272/how-to-make-multiple-socket-write-and-socket-recv-calls- in-php) – Celada

+0

@Celada您提供的鏈接不起作用... – shadyyx

回答

0

兩個函數應使用:

stream_set_blocking($socket, true); 

而且

stream_get_contents($socket); 

設置你的流塊需要返回的數據之前,您的應用程序將繼續執行腳本。

如果你沒有設置流塊,有時延遲會導致你的PHP腳本認爲沒有響應,導致你不接收數據。

另外,使用stream_get_contents從套接字中拉出。這將默認抓取完整的緩衝區。

+0

我收到警告:stream_get_contents():如果使用stream_get_contents($ socket)函數,提供的資源不是有效的流資源。再次感謝您的幫助! –

+0

我是新來的套接字級編程,我真的不知道在哪裏插入我的代碼中的兩個選項之一。你能否詳細說明你的答案。 –

+0

請任何人,請回答以下問題http://stackoverflow.com/questions/7195381/multiple-read-writes-on-a-single-socket-connection-in-php –

-1

正確的方法是使用socket_read,而不是像其他人所建議的那樣使用stream_get_contests。

下面是一個例子:

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 

$result = socket_connect($sock, "10.197.24.40", "5000"); 

$request = '{ "request" : { "id" : "some_function_id", "data": "55555555-5"} }'; 

// We send the request 
socket_write($sock,$request); 

socket_read($sock,1000000); 

socket_close($sock); 

我已經在實際環境中測試此代碼,它工作正常。