Network

如何使用 PHP 連接到節點

  • September 3, 2016

我想製作一個連接到節點(在我的伺服器上)的簡單 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 埠是什麼意思?
  1. 插座連接

接下來,我嘗試將此版本消息發送到我的節點,並返回一條版本消息。這是我的程式碼:

$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)

連結到即將執行的腳本:https ://bitcoin.stackexchange.com/a/48399/24926

引用自:https://bitcoin.stackexchange.com/questions/48391