【问题标题】:Java: How communicate with machines?Java:如何与机器通信?
【发布时间】:2011-05-24 15:05:17
【问题描述】:

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

【问题讨论】:

标签: java web-applications jakarta-ee telnet


【解决方案1】:

我不知道您正在与哪种设备交谈,但如果您通常使用telnet 向它输入命令,您可能会向它发送换行符,并且可能需要这些换行符作为命令终止符。所以也许

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

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

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

【讨论】:

  • 我尝试了您的建议但没有用,我已经取消注释该 flush() 调用。
  • 您应该使用调试器逐步检查它,或者只需插入一些System.out.println 调用以找出它挂在哪里:new Socket()writeUTF() 或@987654328 @。每个都表示不同的问题。
  • 你的评论太棒了,我在这里做了一些修改,效果很好,但是你的评论对我很重要,谢谢老兄!
【解决方案2】:

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

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

【讨论】:

  • 我明白了,我在想@jarnbjo
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多