问题描述
|
我正在尝试通过java与我的设备进行通信。
我可以使用telnet与之通信,我知道因为我使用PuTTY,所以我的配置是:
ip:192.168.1.4端口: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吗?
解决方法
我不知道您正在使用哪种设备,但是如果通常使用ѭ1键向其键入命令,则可能是向其发送换行符,也许这些换行符需要用作命令终止符。所以也许
dataOutputStream.writeUTF(\"}Rv!\\n\");
要么
dataOutputStream.writeUTF(\"}Rv!\\r\\n\");
(以及取消对that4ѭ的调用的注释)会更好。
,您真正想要发送到设备的什么? DataOutputStream#writeUTF使用Java特定的字符串编码,并且我怀疑这是设备真正期望的。
除此之外,如果设备确实正确地实现了telnet协议(而不仅仅是可以通过telnet客户端访问的协议),则您必须使用Java telnet库来支持控制序列或自己实现。您不能只像示例代码中那样对套接字进行读写。