Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

#Testando uma conexão - Cliente

Oi pessoal. Boa noite. Estou tentando me conectar ao um servidor telnet (telehack.com: 23) para enviar e receber informações, porém, não estou conseguindo. Até o momento, estou apenas recebendo informações na primeira conexão, mas quando envio um comando não estou recebendo. Alguém poderia me ajudar? Abaixo o código:

import java.net.Socket;
import java.util.Scanner;

public class AbrirConexao {

    public AbrirConexao() throws Exception {

        System.out.println("Informe o ip");
        Scanner ip = new Scanner(System.in);
        String AddressIp = ip.nextLine();

        System.out.println("Informe a porta");
        Scanner porta = new Scanner(System.in);
        int protocoloPorta = porta.nextInt();

        Socket socket = new Socket(AddressIp, protocoloPorta);
        System.out.println("Conectado..");

        Thread enviar = new Thread(new EnviarDados(socket));
        Thread recebe = new Thread(new ReceberDados(socket));
        enviar.start();
        recebe.start();

        enviar.join();

        ip.close();
        porta.close();
        System.out.println("fim");
        socket.close();
        System.out.println("fim");
    }

}
import java.net.Socket;
import java.util.Scanner;

public class ReceberDados implements Runnable {

    private Socket socket;

    public ReceberDados(Socket socket) {
        this.socket = socket;
    }

    public void recebe() throws Exception {
        System.out.println("recebendo");
        Scanner recebe = new Scanner(socket.getInputStream());
        while (recebe.hasNextLine()) {
            String linha = recebe.nextLine();
            System.out.println(linha);
        }

        recebe.close();
        System.out.println("fim");

    }

    @Override
    public void run() {
        try {
            recebe();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class EnviarDados implements Runnable {

    private Socket socket;

    public EnviarDados(Socket socket) {
        this.socket = socket;
    }

    public void enviar() throws Exception {
        PrintStream enviar = new PrintStream(socket.getOutputStream());
        Scanner teclado = new Scanner(System.in);
        while (teclado.hasNextLine()) {
            String linha = teclado.nextLine();
            enviar.println(linha);
            enviar.flush();
            System.out.println("enviado\n");

        }
        teclado.close();
    }

    @Override
    public void run() {
        try {
            enviar();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

public class TesteConexao {

    public static void main(String[] args) throws Exception {
        new AbrirConexao();

    }

}
2 respostas

Ola, boa noite, poderia postar algum exemplo de envio e a resposta esperada?

solução!

Boa tarde. Consegui resolver (Fiz umas pesquisas no Stackoverflow). Na verdade, após a conexão com servidor, todo o comando enviado não tinha retorno. Abaixo a solução corrigindo a classe EnviarDados:

import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.util.Scanner;

public class EnviarDados implements Runnable {

    private Socket socket;

    public EnviarDados(Socket socket) {
        this.socket = socket;
    }

    public void enviar() throws Exception {

        Writer enviar = new OutputStreamWriter(socket.getOutputStream());
        Scanner teclado = new Scanner(System.in);
        while (teclado.hasNextLine()) {
            String linha = teclado.nextLine();
            enviar.write(linha + "\r\n");
            enviar.flush();
        }
        teclado.close();
    }

    @Override
    public void run() {
        try {
            enviar();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

Fonte: https://stackoverflow.com/questions/6399557/java-simple-telnet-client-using-sockets

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software