我试图替换在终端中运行的Netcat命令,该命令将重置服务器上的某些数据。netcat命令如下所示:
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
命令中获得的可能结果,如果OutputStream以正确的方式发送正确的数据,我希望将相同的消息发送给InputStream:
错误的论点:
{"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()
。
如果有人能回答为什么其他作者无法工作的原因,并解释他们将如何影响发送到html" target="_blank">服务器的数据,那么我很乐意接受这作为解决方案。
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();
}
我认为服务器在消息末尾需要换行符。尝试与一起使用原始代码,write()
并\n
在末尾添加以确认这一点。
然而,当我通过UDP实现它时,我错过了这种方法
问题内容: 我想发送以下JSON文本 到Web服务并读取响应。我知道如何读取JSON。问题是上述JSON对象必须以变量名发送。 我该如何从android做到这一点?创建请求对象,设置内容标头等步骤是什么。 问题答案: Android没有用于发送和接收HTTP的特殊代码,您可以使用标准Java代码。我建议使用Android随附的Apache HTTP客户端。这是我用来发送HTTP POST的代码片段
问题内容: 我想将JSON文本{}发送到Web服务并读取响应。我该如何从android做到这一点?创建请求对象,设置内容标头等步骤是什么。 我的代码在这里 我做过什么错误,请纠正我,因为它向我显示了错误的请求错误,但是当我在海报中发帖时,它向我显示了成功200的状态 问题答案: 我这样做 此外,还将Web服务URL作为参数。
> 构造函数接受InetSocketAddress和actorref。InetSocketAddress是有意义的(我假设这是目的地),但是actorref是什么?这是我第一次使用akka,但据我了解,ActorRef是另一个演员的引用。既然我的TCP客户端是一个参与者,并且我希望这个TCP参与者与TCP服务器通信,而不是与另一个参与者通信,为什么我要给它一个参与者引用? 伙伴对象中的道具功能是用
问题内容: 我定义一个类,然后设置该类类型的对象。我想将此对象透明地发送到在另一台计算机上运行的另一个Java应用程序。什么是实现这一目标的最佳技术? 问题答案: 您可以使用Java API创建对象流并发送任何可序列化的对象。但您必须注意,这些内容不会通过网络进行加密: 在发送方方面: 在接收端: