簡體   English   中英

如何使用 sockets 和 Java 連接到經紀人 API?

[英]How to connect to a broker API using sockets and Java?

我一直在嘗試連接到 XTB API,但似乎無法正常工作。 我對 sockets 的體驗為零,我正在學習 go。我正在嘗試發送 JSON object,我期待某種響應,要么是成功消息,要么是錯誤消息,但我什么也沒收到。 我什至不知道我做的對不對。

public static void main(String[] args) {

    String host = "xapi.xtb.com";
    int port = 5112;
    Socket s;
    try {
        JSONObject main = new JSONObject();
        JSONObject user = new JSONObject();
        main.put("command", "login");
        user.put("userId", "MY_ID");
        user.put("password", "MY_PSSWD");
        main.put("arguments", user);
        
        s = new Socket(host, port);
        SocketAddress a;
        
        a = new InetSocketAddress("xapi.xtb.com", 5112);
        
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        
        out.write(main.toString());
        String response = in.readLine();
        System.out.println(response);
        in.close();
        out.close();
        
    } catch (IOException ex) {
        ex.printStackTrace(System.out);
    }

}

我只設法讓他們的 WebSocket 端點工作。 除了他們的整個 API 文檔僅包含 WebSocket 命令這一事實之外,我認為他們希望用戶以這種方式連接。

我幫不了你Java,但算法如下:

1.定義連接

獲取 WebSocket 客戶端庫 / package。 通常您要做的第一件事是使用 wss://... 地址作為參數來實例化 object。 在這個階段不要發出連接命令。

2.定義事件處理程序

大多數 WebSocket 客戶端調度您需要在代碼中處理的事件。

第一個事件通常是“打開的”,一旦建立連接就會被觸發。 來自服務器的每條消息都會觸發一個“消息”事件。 您需要為“onOpen”和“onMessage”事件(無論命名約定如何)編寫處理程序,這將執行您的代碼邏輯。

通常在您的 WebSocket package 中會有一個“發送”命令,您可以使用它來向服務器發送消息。 使用文檔中描述的命令作為發送命令的有效負載:

// pseudocode

ws.send({ 
  "command":"login",
  "arguments": {
    "userId":"1000",
    "password":"PASSWORD"
  }
})

3.連接

一旦定義了事件處理程序,您就可以發出“連接”命令。

祝您交易順利。 希望能幫助到你。

也許我已經非常非常非常晚了但是...我一直在玩你的例子。

您將獲得 null,因為連接是普通的 http。

要修復它,您需要更改:

import java.net.Socket;

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

然后,在創建套接字時......

代替

Socket s
s = new Socket(host, port);

你必須把這個:

 SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
 SSLSocket s = (SSLSocket) factory.createSocket(host, port);

另外,在 out.write.... 添加

    out.flush();

你完成了

為什么? 在 xtb api 文檔中,他們這樣說:

所有服務器都使用 SSL 連接。

在弄亂了 wireshark 之后,我發現 JSON 是以純文本形式發送的……

您可能之前已經找到它,因為這個問題很老,但它保留在這里以防其他人遇到問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM