1

我对比特币很陌生,这是我对比特币的第一次实验。

我们一直在尝试使用 bitcoind(使用 testnet)在 BTC 上开发基于 Java 的应用程序。我们使用带有基本身份验证的 Jersey 客户端使用简单的 HTTP Post,如下所示。我们已经将 jersey 客户端作为项目依赖项的一部分。我们在 Mac OS 上运行。bitcoind 和 java 客户端托管在同一个系统中。

Client client = Client.create();

String url = "http://"+username+':'+password+"@localhost:18333";
//String url = "http://localhost:18333";
System.out.println("URL is : "+url);
WebResource webResource = client.resource(url);

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
   return new PasswordAuthentication (username, password.toCharArray());
    }
    });

String input = "{\"method\":\"getblockcount\",\"params\":[],\"id\":\"1\"}";
ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);

当我们执行这个时,我们得到

Caused by: java.net.SocketException: Unexpected end of file from server
   at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:772)
   at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
   at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)

从我理解的例外情况来看,有一些服务器端错误,但我无法在日志文件中看到错误。degug.log 没有提供任何详细信息。

bitcoin.conf 文件中的条目如下:

rpcuser=bitcoinrpc
rpcpassword=5UKQTzWTf7EEJnkShZhr9tbjpDVNmLMgQkFfWsnZhLey
testnet=1
server=1

我也尝试使用 json-rpc 客户端与 bitcoind 集成,这导致了同样的错误。

非常感谢解决此错误的任何帮助。先感谢您。如果您需要更多详细信息,请告诉我。

问候, Manjunath

====== 编辑 ======

当我检查请求和响应时,它给出“远程服务器在发送响应标头之前关闭连接”错误作为 HTTP 失败场景的一部分。以下是请求数据内容:

网址:http://192.168.2.111:18333/

请求数据:

{“方法”:“getblockcount”,“参数”:[],“id”:“1”}

请帮助我了解错误在哪里。

================ 编辑=================

在 bitcoin.conf 中添加了以下条目以允许来自客户端的连接。但仍然面临同样的错误:

rpcallowip=192.168.2.111
rpcallowip=127.0.0.1

问候, Manjunath

4

1 回答 1

-1

经过所有的调整,我能够让它正常工作。为了他人的利益,这里是对 bitcoind 进行 JSON-RPC 调用的 Java 代码(使用 Jersey 客户端):

bitcoin.conf 条目:

rpcuser=bitcoinrpc
rpcpassword=5UKQTzWTf7EEJnkShZhr9tbjpDVNmLMgQkFfWsnZhLey    
testnet=1
server=1
#txindex=1
rpcallowip=192.168.2.*
rpcallowip=127.0.0.1
rpcport=8999
#rpctimeout=60000

确保更改端口号并且不要忘记提供指向相应 IP 地址的 rpcallowip 条目。

客户代码:

DefaultClientConfig config = new DefaultClientConfig();

config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
            Boolean.TRUE);
Client client = Client.create(config);
client.addFilter(new HTTPBasicAuthFilter(username, password));
WebResource webResource = client.resource(url);
String input = "{\"id\":\"jsonrpc\",\"method\":\"listaccounts\",\"params\":[]}";
ClientResponse response = webResource.accept("application/json").type("application/json")
           .post(ClientResponse.class, input);

而已。您可以从 bitcoind 集成开始。

问候, Manjunath

于 2014-09-09T10:29:17.783 回答