2015-06-12 158 views
0

我有一個正在偵聽請求的Java服務器和一個發送這些請求的PHP頁面。PHP套接字寫入然後讀取阻塞套接字

一旦我連接到服務器,我用「socket_write」命令寫了一些東西,然後嘗試用「socket_read」讀取服務器答案。 (而不是等待答案,我想知道如何正確地同步兩個程序,例如信號量)。

下面是代碼:

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

$con = socket_connect($socket, "127.0.0.1",6543); 

//Connected, we can ask 


$message = "SLICE"; 
socket_write($socket,$message,strlen($message)); 

$buf = socket_read($socket,2048,PHP_NORMAL_READ); 

echo $buf; 

socket_close($socket); 

Java服務器監聽使用套接字的InputStream的請求。 當我評論兩行$ buf = socket_read和echo $ buf時,服務器能夠獲得「SLICE」消息。 但是,如果我這樣離開它,似乎PHP寫入套接字,然後直接獨佔套接字嘗試讀取它,之前我的Java服務器能夠讀取套接字!

然後我的Java服務器被無限地阻塞在「readline();」而在socket_read上也阻塞了PHP。

如何同步所有這些?

+0

需要Java代碼。但是從套接​​字讀取很容易,你應該能夠複製關於這個主題的任何教程。 – markspace

+1

不知道Java代碼在做什麼,我只能冒險猜測你需要換行或什麼?嘗試$ message =「SLICE」。 PHP_EOL; –

+0

是的,與PHP.EOL它完美的作品! 謝謝! – QuentinRM

回答

0

按照詹姆斯·洛克哈特的評論,這是解決方案:

不知道什麼是Java代碼是幹什麼,我只能妄自猜測 什麼,你需要斷行或東西嗎?嘗試$ message =「SLICE」。 PHP_EOL;