Java:如何与机器通信?

时间:2011-05-24 15:05:18

标签: java web-applications java-ee telnet

我正在尝试通过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吗?

2 个答案:

答案 0 :(得分:3)

我不知道你在说什么类型的设备,但如果你通常使用telnet键入命令,你可能会向它发送换行符,也许这些换行符需要作为命令终止。也许

dataOutputStream.writeUTF("}Rv!\n");

dataOutputStream.writeUTF("}Rv!\r\n");

(以及对flush()的调用取消注释)会更好。

答案 1 :(得分:1)

您真正想要发送给设备的是什么? DataOutputStream#writeUTF使用Java特定的字符串编码,我怀疑这是设备真正期望的。

除此之外,如果设备确实正确实现了telnet协议(而不仅仅是可以通过telnet客户端访问的东西),则必须使用Java telnet库来支持控制序列或自己实现。您不能像在示例代码中那样只读取和写入套接字。