Я работаю с Evolis Card Printer SDK, он связывается с клиентом с помощью JsonRP C через TCP-сокет.
У меня есть Java пример, предоставленный производителем, но у меня возникли проблемы с чтением сокета:
package MinimalClient;
import java.io.*;
import java.net.*;
public class MinimalClient
{
public static void main(String[] args)
{
try {
String ip = "11.1.24.210";
int port = 18000;
char[] data = new char[1024];
String request = "{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"CMD.SendCommand\",\"params\":{\"command\":\"Rfv\", \"device\":\"Evolis Primacy\", \"timeout\":\"5000\"}}";
String answer = "";
Socket socket = new Socket(ip,port);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
byte[] byteRequest = request.getBytes("UTF-8");
out.write(byteRequest);
out.flush();
while( (br.read(data)) != -1 )
{
answer = new String(data);
System.out.println(answer);
}
socket.close();
}
catch (Exception e)
{
System.out.println("Communication failed :\n");
System.out.println(" - check TCP communication is activated\n");
System.out.println(" - check the service is activated\n");
System.out.println(" - check your IP address and port\n");
}
}
}
Я застрял в while( (br.read(data)) != -1 )
, потому что после первого l oop, BufferedReader.read не возвращает -1 и остается там до истечения времени ожидания!
Первый запуск получает все JSON содержимого ответа, а затем второй запуск застревает, потому что ничего не происходит читать.
Когда BufferedReader.read (char []) возвращает -1?