Network
如何使用 PHP 連接到節點
我想製作一個連接到節點(在我的伺服器上)的簡單 PHP 腳本,以便我可以接收它中繼的數據。
但是,我是套接字的新手,我在握手過程中遇到了困難。這是我到目前為止所得到的:
1.版本資訊
我已經建構了自己的版本消息。結果如下所示:
Config ------ version: 60002 node: 85.119.83.25:8333 local: 90.213.66.225:8333 start_height: 0 VERSION MESSAGE --------------- Header:Array ( [magicbytes] => F9 BE B4 D9 [command] => 76 65 72 73 69 6F 6E 00 00 00 00 00 [payload_size] => 55 00 00 00 [checksum] => 18 32 C2 E4 ) Payload:Array ( [version] => 62 EA 00 00 [services] => 01 00 00 00 00 00 00 00 [timestamp] => 18 A3 CA 57 00 00 00 00 [addr_recv] => 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 55 77 53 19 20 8D [addr_from] => 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 5A D5 42 E1 20 8D [nonce] => 87 58 8D 22 00 00 00 00 [user_agent] => 00 [start_height] => 00 00 00 00 ) Serialized: F9BEB4D976657273696F6E0000000000550000001832C2E462EA0000010000000000000018A3CA5700000000010000000000000000000000000000000000FFFF55775319208D010000000000000000000000000000000000FFFF5AD542E1208D87588D22000000000000000000
有沒有明顯的錯誤?我不確定的事情是:
- 我的 addr_from 埠是什麼意思?
- 插座連接
接下來,我嘗試將此版本消息發送到我的節點,並返回一條版本消息。這是我的程式碼:
$socket = socket_create(AF_INET, SOCK_STREAM, 6); socket_connect($socket, $node_ip, $node_port); socket_send($socket, $message, strlen($message) / 2, 0); socket_recv($socket, $buf, 2000, MSG_WAITALL); var_dump($buf);
所有的套接字函式似乎都是成功的,但結果
var_dump($buf)
是NULL
.*我想我最大的問題是我沒有收到任何錯誤消息,所以很難解決我哪裡出錯了。*你能為我指出正確的方向嗎?
到目前為止,這是我的 PHP 腳本:http: //pastebin.com/q7zf4NMj
我以十六進制格式通過套接字發送數據,但它似乎應該是二進制的。
這可以解決問題:
hex2bin($message)