概述
我试图替换在终端中运行的Netcat命令,它将重置服务器上的一些数据。该netcat的命令如下:用Java通过TCP发送JSON对象
echo '{"id":1, "method":"object.deleteAll", "params":["subscriber"]} ' | nc x.x.x.x 3994
我一直在努力实现它在Java中,因为我希望能够从我开发一个应用程序调用该命令。虽然我遇到了问题,但该命令从未在服务器上执行过。
这是我的Java代码:
try {
Socket socket = new Socket("x.x.x.x", 3994);
String string = "{"id":1,"method":"object.deleteAll","params":["subscriber"]}";
DataInputStream is = new DataInputStream(socket.getInputStream());
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
os.write(string.getBytes());
os.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
代码还挂在while循环应该读InputStream,我不知道为什么。我一直在使用Wireshark来捕获的数据包和即将出来的数据看起来是一样的:
{"id":1,"method":"object.deleteAll","params":["subscriber"]}
也许剩余数据包以同样的方式不是形,但我真的不明白为什么将会。也许我是以错误的方式写入字符串到OutputStream?我不知道:(
编辑: 这些都是可能的结果我从运行nc得到命令,我希望得到同样的消息到的InputStream如果OutputStream的以正确的方式将正确的数据:
错误论点:
{"id":1,"error":{"code":-32602,"message":"Invalid entity type: subscribe"}}
好了,成功:
{"id":1,"result":100}
没有删除:
{"id":1,"result":0}
哇,我真的不知道。我尝试过一些不同的作家,如“缓冲作家”和“打印作家”,看来PrintWriter是解决方案。尽管我不能使用PrintWriter.write()和PrintWriter.print()方法。我不得不使用PrintWriter.println()。
如果有人有答案,为什么其他作家不会工作,并解释他们将如何影响发送到服务器的数据我会很乐意接受作为解决方案。
try {
Socket socket = new Socket(InetAddress.getByName("x.x.x.x"), 3994);
String string = "{"id":1,"method":"object.deleteAll","params":["subscriber"]}";
DataInputStream is = new DataInputStream(socket.getInputStream());
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
PrintWriter pw = new PrintWriter(os);
pw.println(string);
pw.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
2013-02-09
span
+0
目标x.x.x.x:3994是否响应任何数据?如果没有,你的程序将挂起。 –
2013-02-09 12:22:54
+0
我收到的数据包可以在wireshark中看到,但它们不包含任何数据。我只收到发送数据包的ACK,然后收到FIN/FIN ACK序列。当我在终端中运行nc命令时,如果语法错误,我会得到一个“错误”,如果不成功,则返回“result = 0”,如果成功执行,则返回“result = 1”。我正在使用应该出现在输入流中的错误消息更新问题。 –
2013-02-09 12:25:04
+0
因此,如果您不希望目标的任何输出确认JSON数据传输,则可以跳过while循环。尝试评论一下,看看这是否符合你的需求。 –
2013-02-09 12:26:56
最后
以上就是潇洒鸵鸟为你收集整理的java json socket_用Java通过TCP发送JSON对象的全部内容,希望文章能够帮你解决java json socket_用Java通过TCP发送JSON对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复