Получение и отправка данных Java Socket (JSON-RPC 2.0) - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно написать программу, использующую Java, для подключения сокета, отправки аутентификационных данных и получения ответа.У меня есть код на Python, который работает, и я использую это в качестве примера.

Я могу подключиться, но после отправки данных я ничего не получил.

Ниже кода Java, который я написал:

String hostname = "remoteHost";
int port = 4200;

Socket socket = new Socket(hostname, port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

JSONObject json = new JSONObject();
JSONObject params = new JSONObject();

params.put("code", "authCode");

json.put("jsonrpc", "2.0");
json.put("method", "authenticate");
json.put("params", params);
json.put("id", "0");

out.write(json.toString());

System.out.println(in.readLine());

Ниже приведен пример вPyhton:

import socket, json
from dateutil import parser

host = "app.sensemetrics.com"
port = 4200
apiCode = "YourAPIKey"

# Open a new socket connection
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))

# Send the authentication request
handshake = json.dumps({
    "jsonrpc": "2.0",
    "method": "authenticate",
    "params": {
        "code" : apiCode
    },
    "id": 0
})
s.send(handshake)

# Parse the response
jsonFrame = decodeOneJsonFrame(s)
response = json.loads(jsonFrame)
print("\r\nHandshake Exchange:\r\n" + "     --> " + handshake + "\r\n" + "     <-- " + jsonFrame)

# Close the socket connection
s.close()

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Используйте try-with-resources для автоматического закрытия открытых ресурсов и OutputStream.flush - для сброса данных в поток.

Измените ваш код, как показано ниже:

String hostname = "remoteHost";
int port = 4200;

JSONObject json = new JSONObject();
JSONObject params = new JSONObject();
params.put("code", "authCode");
json.put("jsonrpc", "2.0");
json.put("method", "authenticate");
json.put("params", params);
json.put("id", "0");

try (
    Socket socket = new Socket(hostname, port);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
) {
    out.write(json.toString());
    out.flush();

    String line;
    while ((line = in.readLine()) != null) {
        System.out.println(line);
    }
}

0 голосов
/ 26 февраля 2019
out.write(json.toString());

Я думаю, вам также следует позвонить out.flush().

Не забудьте также позвонить flush на другую сторону после написания ответа, чтобы вы могли прочитать его с помощью System.out.println(in.readLine());* 1007.*

См. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...