我正在尝试通过java与我的设备通信。 我可以使用telnet与它通信,我知道因为我使用PuTTY,所以我的配置是:
ip:192.168.1.4 port:2001通信类型:telnet
这很有效,我的设备和网络运行正常。
所以我虽然我可以通过java做同样的事情,然后我创建这个类:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*
* @author Valter
*/
public class Middleware {
public static void main(String args[]) {
try {
Socket socket = new Socket("192.168.1.4", 2001);
// create a channel between to receive data
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
// create a channel between to send data
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF("}Rv!");
// dataOutputStream.flush();
String answer= dataInputStream.readUTF();
System.out.println("Answer:"+answer);
dataInputStream.close();
dataOutputStream.close();
socket.close();
} catch (UnknownHostException ex) {
System.out.println("EXCEÇÃO UNKNOW HOST EXCEPTION");
} catch (IOException ex) {
System.out.println("EXCEÇÃO IOEXCEPTION");
System.out.println(ex.getMessage());
}
}
}
但是当我尝试执行此操作时,没有任何反应,没有例外,没有任何事情。 我看起来像一个'而'没有尽头。
我该怎么办? 我应该在这里使用客户端telnet到java吗?
答案 0 :(得分:3)
我不知道你在说什么类型的设备,但如果你通常使用telnet
键入命令,你可能会向它发送换行符,也许这些换行符需要作为命令终止。也许
dataOutputStream.writeUTF("}Rv!\n");
或
dataOutputStream.writeUTF("}Rv!\r\n");
(以及对flush()
的调用取消注释)会更好。
答案 1 :(得分:1)
您真正想要发送给设备的是什么? DataOutputStream#writeUTF使用Java特定的字符串编码,我怀疑这是设备真正期望的。
除此之外,如果设备确实正确实现了telnet协议(而不仅仅是可以通过telnet客户端访问的东西),则必须使用Java telnet库来支持控制序列或自己实现。您不能像在示例代码中那样只读取和写入套接字。