2013-08-24 53 views
1

慾望: 我有一個設備或微控制器,我會稱之爲一個MC,我需要溝通,當一個網頁按鈕被點擊使用套接字。溝通一個按鈕點擊事件與插座

MC1 
<button id ='on1' name='mc1'>On</button> 
<button id ='off1' name='mc1'>off</button> 

詳情: 當按鈕被點擊傳遞信息到MC什麼,我試圖完成的。

我試過了: 目前我可以偵聽一個端口,並且可以向mc寫入數據以及接收數據。 要做到這一點即時通過服務器php cli啓動一個文件。該文件包含這些基本套接字函數。

$socket = @socket_create_listen("port#"); 
$client = socket_accept($socket); 
socket_write($client, $msg); 
socket_read ($client, 256); 

的MC然後連接到服務器的端口#

問題: 林有了解如何縮小與按鈕我的PHP網頁之間的差距,並傳遞數據的困難是,按鈕已被點擊到MC。

嘗試在一個解決方案: 我可以有一個監聽端口運行,然後在一個單獨的文件寫入到客戶端的文件?

附加說明:MC局域網我想避免設置端口轉發和外部IP有時更改。由於這些原因,我選擇讓MC建立到服務器的連接,從而允許服務器寫入MC,而不需要端口轉發和不變的IP地址。

感謝 JT

回答

1

最簡單的方法是創建一個簡單的程序(PHP是罰款),在Web服務器上運行(如Apache,但不管)。每當它被調用時,它就會同步打開一個到您的MC的套接字併發送數據。

你不會寫任何代碼來打開一個監聽套接字,但是你的php會打開一個客戶端套接字到MC,socket_connect,發送數據,然後關閉套接字......然後你可以返回狀態回到網頁客戶端。

+0

這個問題是它需要我的MC有端口轉發和一個不會改變的IP ......我希望通過讓MC啓動連接來避免這個問題,因此服務器現在能夠寫入MC避免端口轉發和IP問題。無論如何,我感謝你的回覆! –

+0

@tman雖然這可以在一個web服務器內完成(不知道如何在普通的PHP框架中做到最好),但更簡單的方法可能是在同一臺機器上運行另一個進程,並且MC始終與MC連接。然後,當你在你的web框架中點擊按鈕時,只需「點擊」這個其他進程(套接字,文件系統,不管),並讓它發送你的數據。您需要儘可能安全地進行安裝,但它會阻止您自己編寫Web服務器(困難)或在某些其他Web服務器中使用某些高級功能。 – xaxxon

+0

啊,也許你可以詳細說明「MC一直連接到它的同一臺機器」的說法。 MC直接連​​接到互聯網,所以沒有其他機器。我曾考慮過放置一個小型操作系統......就像一個小型操作系統,但我不知道這將如何解決問題......您建議可以運行什麼流程? –

0

基於假設您的Web服務器無法直接打開到您的MC的連接,並且您的MC只能創建到靜態IP的出站連接。你想在你的php cli代碼中看到一個循環,參見http://www.php.net/manual/en/function.socket-read.php#73509 - 將usleep (1000000);更改爲sleep(1);,並且在sleep命令之後,檢查數據庫(或文件是否存在)是否應將任何消息發送給MC。然後在您的前端php腳本(html)中,您可以寫入數據庫或創建一個文件,當用戶POST回來點擊按鈕時。

+0

Ahhh可怕的循環哈哈......你的第一個假設是正確的......我這樣做是爲了避免必須設置端口前瞻並確保客戶端IP是相同的。我的研究告訴我,爲了避免這個問題,MC開始連接,然後避免所有問題。我在循環中遇到的問題是它對服務器和數據庫造成了很大的壓力。我真的很討厭使用所有這些資源來檢查一個文件是否已經改變。它也增加了我認爲哪些是非常不幸的延遲。儘管我很欣賞你的回覆! –