【发布时间】:2020-02-28 15:39:13
【问题描述】:
我正在使用 Evolis 卡片打印机 SDK,它使用 JsonRPC 通过 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 ) 中,因为在第一个循环之后,BufferedReader.read 不会返回 -1 并一直停留在那里直到超时!
第一次运行得到回复内容的所有JSON,然后第二次运行卡住了,因为没有什么可读取的。
当 BufferedReader.read(char[]) 返回 -1 时?
【问题讨论】:
标签: java sockets tcp sdk bufferedreader