Send String via socket Java

Asked

Viewed 1,438 times

1

I have my Client and Server classes. I want to send String to the server. I have tried several methods but error or it sends an empty string to the server. Someone can give me a light of what I am doing wrong?

public class Cliente {

    ArrayList<Integer> armazenar = new ArrayList<>();

    public static void main(String[] args)
            throws IOException {
        Socket cliente = new Socket("127.0.0.1", 12345);
        System.out.println("O cliente se conectou ao servidor!");
        Cliente c = new Cliente();


        // LER ARQUIVO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        System.out.printf("Lendo arquivo impar.txt\n");
        String nome = "/home/teste/impar.txt";

        System.out.printf("\nConteúdo do arquivo de texto:");
        try {
            FileReader arq = new FileReader(nome);
            BufferedReader lerArq = new BufferedReader(arq);
            String linha = "";


            // a variável "linha" recebe o valor "null" quando o processo
            // de repetição atingir o final do arquivo texto
            while (linha != null) {
                System.out.printf("%s\n", linha);
                linha = lerArq.readLine(); // lê da primeira até a última linha

                try {
                    c.armazenar.add(Integer.parseInt(linha));

                } catch (NumberFormatException e) {
                    e.getMessage();
                }
            }

            String armazenarString = c.armazenar.toString();
            System.out.println("\nSalvando valores do arquivo impar.txt na variavel armazenarString: " + armazenarString);

            System.out.println("Enviando os dados para o servidor!");


            arq.close();
            cliente.close();
        } catch (IOException e) {
            e.getMessage();
        }
    }
}

.

public class Servidor {

    public static void main(String args[]) throws IOException {
        ServerSocket servidor = new ServerSocket(12345);
        System.out.println("Porta 12345 aberta!");

        Socket cliente = servidor.accept();
        System.out.println("Nova conexão com o cliente " +
                cliente.getInetAddress().getHostAddress()
        );


        servidor.close();
        cliente.close();
    }
}
  • 1

    I don’t see you sending data to the server. Anyway, use the Socket.getOutputStream() method and work with sockets in a file-like way to send messages

1 answer

1


Server After accepting the client connection, check if there is any data available, I do not recommend but will use a while true:

public class Servidor {

public static void main(String args[]) throws IOException {
    ServerSocket servidor = new ServerSocket(12345);
    System.out.println("Porta 12345 aberta!");

    Socket cliente = servidor.accept();
    System.out.println("Nova conexão com o cliente " +
            cliente.getInetAddress().getHostAddress()
    );

    DataOutputStream dis = new DataInputStream(clinete.getInputStream()); // Saída de dados do cliente

    while(true){
        if(dis.avaliabe() >0){
            String mensagem = dis.readUTF() // Lê a tal mensagem
            System.out.println(mensagem); // E exibe na tela
            break;
        } // Chegou alguma coisa?
    }        

    servidor.close();
    cliente.close();
}

}

Client:

System.out.println("Enviando os dados para o servidor!");
//aqui começa o código editado.
DataOutputStream dos = new DataOutputStream(cliente.getOutputStream());
dos.writeUTF("A mensagem!"); //Coloque sua variável string aqui dentro.
dos.flush() // Manda tudo por água abaixo.
dos.close();
//Aqui termina.
arq.close();
cliente.close();
  • 1

    It worked, just a detail Dataoutputstream dis = new Datainputstream(clinete.getInputStream()); It’s Datainputstream dis = new ... Thank you very much.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.