2013-01-03 42 views
1

我正在尋找能夠使用二進制協議連接到服務器的php腳本,發送查詢並從中接收數據。我想知道如何在PHP中實現這個?到目前爲止,我有:將PHP字符串轉換爲二進制格式並在連接到服務器時將其重新轉換

<?php 
$fp = fsockopen("111.111.10.10", "2222", $errno, $errstr, 10); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    fwrite($fp, "You message"); 
    while (!feof($fp)) { 
     echo fgets($fp, 128); 
    } 
    fclose($fp); 
} 
?> 

當我說話的二進制文件,我的意思不是計算機語言的底層,我的意思是被髮送到服務器的特定字符串應該在「0101001」進行轉換,因爲這是服務器讀取和轉換信息的方式。我需要一種方法來將php字符串轉換爲這種格式並將其重新轉換回來。

我會解釋你是否完全理解這個問題。

+0

想到什麼是面向字符的編碼比特。例如:'獲取字符串的第一個字母,將其轉換爲它的整數值,將該數字轉換爲二進制併發送它。'雖然......你爲什麼想要這麼麻煩?爲什麼不直接發送字符串本身?因爲它將會是一路和零路。 –

+0

@RefugnicEternium做一個類似於你在PHP中提議的轉換會導致一個'string'包含(ascii編碼的)1和0,因爲PHP沒有基礎的二進制數據類型。因此,您將擴展七次數據的長度(ASCII字符爲七位),並且您還將使其對希望(ascii編碼)字節的套接字的另一端無法理解。 –

+0

是的,真正的Refugnic。那麼,服務器已經被編程爲以這種方式傳輸數據,這就是爲什麼我必須在php中使用它來在網站上顯示數據。 –

回答

1

使用packunpack轉換到/從二進制

+0

請參閱我發給RefugnicEternium的註釋,結果是一樣的 - 一個包含ASCII和零的字符串。 –

0

它們已經在二進制表示。通過fwrite將它們傳輸到服務器應該就足夠了。

套接字的另一端將接收到二進制字符串並按原樣處理它。

3

要創建一個字符串的二進制字符串,你需要幾個步驟。首先將所有字符更改爲數字ord(),然後將該數字轉換爲十進制decbin。我還使用str_pad使它具有8位字符。

我加了墊片的可讀性

<?php 
$str = 'Hello world'; 
$l = strlen($str); 
$result = ''; 
while ($l--) { 
    $result = str_pad(decbin(ord($str[$l])), 8, "0", STR_PAD_LEFT) . ' - ' . $result; 
} 
print $result; 

//01001000 - 01100101 - 01101100 - 01101100 - 01101111 - 00100000 - 01110111 - 01101111 - 01110010 - 01101100 - 01100100 
?> 
相關問題