Java: Как общаться с машинами? - PullRequest
1 голос
/ 24 мая 2011

Я пытаюсь связаться с моим устройством через 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 здесь?

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Я не знаю, с каким устройством вы разговариваете, но если вы обычно набираете на нем команды, используя telnet, вы, вероятно, отправляете ему новые строки, и, возможно, эти новые строки необходимы в качестве разделителей команд.Так что, возможно,

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

или

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

(наряду с раскомментированием этого вызова flush()) будет работать лучше.

1 голос
/ 24 мая 2011

Что вы действительно хотите отправить на устройство?DataOutputStream # writeUTF использует строковое кодирование, специфичное для Java, и я сомневаюсь, что это то, что устройство действительно ожидает.

За исключением этого, если устройство действительно правильно реализует протокол telnet (а не просто что-то, к чему можно обратиться с помощью клиента telnet), вы должны либо использовать библиотеку Java telnet для поддержки управляющих последовательностей, либо реализоватьэто сам.Вы не можете просто читать и писать в сокет, как в примере кода.

...