2012-05-11 77 views
3

我正在綁定寫入幾個消息(動態創建每個消息)到一個設備通過一個套接字使用PHP創建。第一條消息總是經過;但是,後續的消息做不是通過。爲了幫我調試,請讓我知道是否有這個例子的一個問題:PHP socket_write第一次工作,但

 $socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
     socket_connect($socket, $ip, $port); 
     socket_write($socket, "message 1\r"); 
     socket_write($socket, "message 2\r"); 
+0

'echo socket_strerror()'給你帶來了什麼? – pduersteler

+0

@pduersteler在socket_write給出'0'或socket_strerror(socket_last_error())後給出'Unknown error:0'後立即放置 –

回答

3

你有沒有嘗試添加回車到socket_write($socket, "message 1\r\n");到消息的結束?在很多情況下,當使用緩衝區和流時,這似乎是個竅門。

別的東西值得給予一拍:

//all suggestions rolled into one (including Chris' chr(0) - thanks for that one) 
socket_write($socket, 'message 1'."\r\n".chr(0)); 
usleep(5); 
socket_write($socket, 'Foobar'."\r\n".chr(0)); 

只是給額外的時間一點一點清除緩衝區可以創造奇蹟。

編輯

剛剛有了另一種腦電波:你嘗試過使用可選的長度參數呢?

socket_write($socket, 'message 1'."\r\n".chr(0),strlen('message 1'."\r\n".chr(0))); 
+0

我會嘗試使用usleep(5)。我目前正在用'\ r'結束消息。 (我將編輯以反映'\ r') –

+0

@JohnR:以'\ r'結尾不會,最好使用'\ n'(UNIX)或'\ r \ n'(windows)。 '\ r'是有點windows-y的,但並不是那麼...所以我強烈建議你使用'\ r \ n':P –

+0

除了行結束建議之外,另一端的程序可能正在等待對於空字節終止的塊。 '''nullByte = chr(0);''''''''''上週我抓住了自己的腦袋...... – goat

相關問題