2010-03-24 34 views
2

我嘗試在php中創建套接字並從其他進程中重用它。 我知道這可以用一個守護進程腳本來完成,但我不想這樣做。可重複使用的插座

我創建了一個套接字並將其綁定到特定端口。

$sock = socket_create (AF_INET, SOCK_STREAM, SOL_TCP); 
socket_set_option ($sock, SOL_SOCKET, SO_REUSEADDR, 1); 
socket_bind ($sock, 'xx.xx.xx.xx', 10000); 
socket_connect ($sock, $host, $port); 

從另一個php文件中,我做了同樣的事情。但是我從第2個文件發送的數據包沒有被主機「驗證」。我嗅探了所有的端口,我發現它使用相同的本地和目的端口。我不明白問題在哪裏。

你能幫我嗎? 在任何其他編程語言或任何其他解決方案中都可以。

Andrew

回答

0

你不能在php中使用持久套接字。當你執行一個php文件時,會創建一個新的進程,它不能訪問另一個php進程的變量或套接字,所以它不知道是否已經存在一個套接字並創建它。

+0

好的,但有其他的解決辦法嗎? – Andrew 2010-03-24 10:46:38

1

插座不對稱。服務器端監聽特定端口以供客戶端連接 - 客戶端不指定本地端口 - 只有遠程端口和地址。它與你實現它的語言無關。

http://www.phpclasses.org/browse/package/5758.html有一個非常好的套接字服務器實現,並帶有示例。

C.