Servidor de eco

2 respostas
V

ALGUEM PODE ME AJUDAR A ENTENDER PQ MEU PROGRAMA SO CAI NA EXCEÇÃO?

import java.io.*;
import java.net.*;

public class ClienteDeEco {

    public static void main(String args[]) {
    try {
        // para se conectar ao servidor, cria-se objeto Socket.
        // O primeiro parâmetro é o IP ou endereço da máquina que
        // se quer conectar e o segundo é a porta da aplicação.
        // Neste caso, usa-se o IP da máquina local (127.0.0.1)
        // e a porta da aplicação ServidorDeEco (2000).
            Socket conexao = new Socket("localhost", 2000);
            // uma vez estabelecida a comunicação, deve-se obter os
            // objetos que permitem controlar o fluxo de comunicação
            BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
            PrintStream saida = new PrintStream(conexao.getOutputStream());
            String linha;

            // objetos que permitem a leitura do teclado
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            // loop principal
                while (true) {
                // lê a linha do teclado
                System.out.print("> ");
                linha = teclado.readLine();
                // envia para o servidor
                saida.println(linha);
                // pega o que o servidor enviou
                linha = entrada.readLine();
                // Verifica se é linha válida, pois se for null a conexão
                // foi interrompida. Se ocorrer isso, termina a execução.
                    if (linha == null) {
                    System.out.println("Conexão encerrada!");
                    break;
                    }

                    // se a linha não for nula, deve-se imprimi-la no vídeo
                    System.out.println(linha);
            }
      } catch (IOException e) {
        // caso ocorra alguma excessão de E/S, mostre qual foi.
        System.out.println("IOException: " + e);
}
}
}
import java.io.*;
import java.net.*;


public class ServidorDeEco {
    public static void main(String args[]) {
        try {
            // criando um socket que fica escutando a porta 2000.
            ServerSocket s = new ServerSocket(2000);

            // loop principal.
            while (true) {
                // Aguarda alguém se conectar. A execução do servidor
                // fica bloqueada na chamada do método accept da classe
                // ServerSocket. Quando alguém se conectar ao servidor, o
                // método desbloqueia e retorna com um objeto da classe
                // Socket, que é uma porta da comunicação.
                System.out.print("Esperando alguém se conectar...");
                Socket conexao = s.accept();
                System.out.println(" Conectou!");
                // obtendo os objetos de controle do fluxo de comunicação
                BufferedReader entrada = new BufferedReader(new
                InputStreamReader(conexao.getInputStream()));
                PrintStream saida = new
                PrintStream(conexao.getOutputStream());
                // esperando por alguma string do cliente até que ele
                // envie uma linha em branco.
                // Verificar se linha recebida não é nula.
                // Isso ocorre quando conexão é interrompida pelo cliente
                // Se a linha não for null(o objeto existe), podemos usar
                // métodos de comparação de string(caso contrário,estaria
                // tentando chamar um método de um objeto que não existe)
                String linha = entrada.readLine();

                while (linha != null && !(linha.trim().equals(""))) {
                // envia a linha de volta.
                saida.println("Eco: " + linha);
                // espera por uma nova linha.
                linha = entrada.readLine();
                }
                // se o cliente enviou linha em branco, fecha-se conexão.
                conexao.close();
                // e volta-se ao loop, esperando mais alguém se conectar
}
}
catch (IOException e) {
// caso ocorra alguma excessão de E/S, mostre qual foi
System.out.println("IOException: " + e);
}
}
}

NO CONSOLE APARECE ESSA MENSAGEM PARA O CLIENTE:
IOException: java.net.BindException: Address already in use: JVM_Bind
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

2 Respostas

T

Eu não entendi muito bem esse código. Acho que tem muita coisa faltando nesse código de socket, como o blind.
Esse tutorial explica bem, dá uma olhada.
http://www.riopomba.ifsudestemg.edu.br/dcc/dcc/materiais/1089335456_PAPER%204%20-%20Sockets%20em%20JAVA.pdf

W

Opa, eu testei aqui e está normal o código.

Pelo erro, provavelmente já tem algum serviço rodando nessa porta (address already in use).

Tenta rodar em outra ou verifica o que está rodando na porta que vc escolheu!

Falou.

Criado 13 de junho de 2011
Ultima resposta 13 de jun. de 2011
Respostas 2
Participantes 3