我最近開始用PHP上的套接字練習,並且遇到了一個我沒有找到任何文檔的問題。我在C++中看到過類似的情況,但這不是一個明確的答案。代碼:Socket_read返回'1'..?
do {
$input = socket_read($client, 12,PHP_BINARY_READ);
echo $input;
} while(TRUE);
應該阻止插座(代碼創建,綁定等不包括在內),並得到使用12個字節或任何信息可以從另一個側面。
奇怪的是,如果讀取12個字節,我只是在變量$輸入中得到'1'。如果我從客戶端發送超過12個字節,那麼我會在$ input的值中收到'1 [REST_OF_DATA]'。
任何想法爲什麼會發生這種情況?
如果我將其更改爲更多數據並更改爲PHP_NORMAL_READ,那麼我會正確接收數據。
PHP手冊在網上沒有說什麼安博socket_read返回 '1' ..
**編輯:好的感謝YOUT早期的答案:)。我正在保存到一個文件並閱讀(不迴應瀏覽器)期待任何字符。我想我可能剛剛發現了一些可能很好的東西,如果有人知道C++套接字可以驗證。不管怎麼說,我讀代碼實際上是這樣的(不是我上面貼):
do {
$input = ($seq_id == 0) ? socket_read($client, 12,PHP_BINARY_READ) : socket_read($client,1024,PHP_BINARY_READ);
echo $input;
} while(TRUE);
我期待在第一次讀取12個字節,那麼1024塊,原因是什麼條件檢查。怪異的'1'來自這個。如果我用上面發佈的行代替它,則數據正常讀取。事實上,即使讀這樣的:
$input = ($seq_ID == 0) ? socket_read($client,12,PHP_BINARY_READ) : socket_read($client, 12,PHP_BINARY_READ);
結果:第一次讀=「1」第2個讀=正確的數據,3 =讀取正確的數據..
你怎麼知道'1'來自'$ input'? – 2012-04-09 16:24:36
我將這個var保存在文件中,並使用vi讀取它 – quinestor 2012-04-09 17:32:42
該代碼看起來有點誤導,'$ seq_id'不會改變。正如你已經改變了一次,我開始不相信你的話了。你在這裏提出的事實能夠強調多少?你能否提供更多細節和自動化測試以及結果? – hakre 2012-04-10 08:49:00