2016-02-28 133 views
-2

我盡力了,但似乎無法得到它。對於一個小故事,我有一個WIFI RGB LED控制器接收器,用於控制我網絡上的一些LED。如何將他的Python腳本轉換爲PHP

我有一個python腳本,執行時可以成功啓用它們。我試圖將這個Python腳本轉換爲PHP,但我還沒有成功。

Python腳本:

import socket 

def Main(): 
    host = '192.168.1.6' # IP of the controller 
    port = 5577 

    s = socket.socket() 
    s.connect((host, port)) 

    s.send('EF0177'.decode('hex')) # connect 
    data = s.recv(1024) 
    s.send('CC2333'.decode('hex')) # send command (turn on in this case) 
    s.close() # disconnect 

if __name__ == '__main__': 
    Main() 

就像我說的,是Python腳本工作。

這是我在PHP的嘗試:

//Connect socket to remote server 
if(!socket_connect($sock , '192.168.1.6' , 5577)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Could not connect: [$errorcode] $errormsg \n"); 
} 

echo "Connection established <br>"; 

$message = 'EF0177'; 

//Send the message to the server 
if(! socket_send ($sock , $message , strlen($message) , 0)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Could not send data: [$errorcode] $errormsg \n"); 
} 

echo "Message send successfully <br>"; 

$message = 'CC2333'; 

//Send the message to the server 
if(! socket_send ($sock , $message , strlen($message) , 0)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Could not send data: [$errorcode] $errormsg \n"); 
} 

echo "Message send successfully <br>"; 

我沒有得到我的PHP腳本任何錯誤,但它沒有成功打開的LED,所以顯然我失去了一些東西。

+1

這不是一個代碼翻譯服務 – 2016-02-28 02:33:52

+0

@Dagon可以理解的迴應,但我不知道還有什麼可以轉身的。這不像我沒有嘗試。我做了一個真正的嘗試,並需要幫助我的PHP。如果不是如何翻譯如何通過一個套接字發送一個值在PHP中。 – Travis

+1

你爲什麼想在PHP中做到這一點?爲什麼不直接用python做,因爲它在那裏工作? –

回答

1

它會出現在您的問題來自於這兩條線:

'EF0177'.decode('hex') 
'CC2333'.decode('hex') 

這些表達式的結果是二進制數據的3個字節長 - 整型數據[0xef, 0x01, 0x77]爲先。

在你的PHP中,你只是發送文本(這是6字節長)。

因爲你可以表達他們與十六進制轉義碼串,你可以將其替換在PHP代碼中兩個$message =線:

$message = '\xEF\x01\x77'; 
$message = '\xCC\x23\x33'; 

這也有可能是,你向服務器發送期待您讀取中間數據(與socket_recv)之間的數據。

+0

我嘗試了這兩個值,它不起作用。在發佈之前,我也嘗試在我的值上使用bin2hex,但沒有成功。我將嘗試socket_recv,好主意 – Travis

+0

還要確保在設置套接字時,您遵循Python套接字('AF_INET'和'SOCK_STREAM')的默認值。 – Kupiakos

+0

我還沒有成功,我注意到並改變了我的連接if(!($ sock = socket_create(AF_INET,SOCK_STREAM,0)))我也在研究socket_write和socket_read之間的區別 – Travis