Java-сокеты помогают клиент-серверу

Мне нужна помощь, чтобы сделать практику Java с потоками. Я хотел, чтобы эта программа вернула мне информацию, которую клиенты пишут со своим именем и временем сообщения. Это код, который у меня есть на данный момент. Точно так же у меня есть сообщения, что я не могу заставить программу печатать большое спасибо, любая помощь приветствуется.

SERVER

public class Servidor {

public static void main(String[] args) {

ServerSocket servidor;
Socket conexion;
DataOutputStream salida;
DataInputStream entrada;
 int num = 0;

 try{

     //Vamos a crear un serverSocket en el puerto seleccionado
     servidor = new ServerSocket();
     System.out.println("Servidor arrancado correctamente");

     while(true){

         //Se espera a la conexion de alguno de los clientes
         conexion = servidor.accept();
         num++;
         System.out.println("Conexión numero"+num+" desde: " + conexion.getInetAddress().getHostName());

         //Abrimos ahora los canales de entrada y salida
         entrada = new DataInputStream(conexion.getInputStream());
         salida = new DataOutputStream(conexion.getOutputStream());

         //Vamos  aleer el mensaje del cliente
         String nombreCliente = entrada.readUTF(); System.out.println("Conexión n " +num+ " mensaje: "+ nombreCliente);

         //Le respondemos al cliente
         salida.writeUTF("Buenos días, " +nombreCliente+ ", Hoy es sábado, día de clase");
         conexion.close();
     }
 }catch (IOException e) {
}

КЛИЕНТ

public class Cliente {

public static void main(String[] args) {

    Socket cliente;
    DataInputStream entrada;
    DataOutputStream salida;
    String mensaje, respuesta;
    String nombreCliente;

    try{
        //Vamos a crear el socket para conectarnos al puerto 5000 del servidor
        cliente = new Socket(InetAddress.getLocalHost(),5000);
        entrada = new DataInputStream(cliente.getInputStream());

        //Creamos los canales de entrada/salida
        salida = new DataOutputStream(cliente.getOutputStream());
        mensaje = "Hola soy el cliente ";
        nombreCliente = "Luis Salgado Manzano";


        //Enviamos el mensaje que queremos al servidor mediante esta instrucción

        salida.writeUTF(nombreCliente);

        //Leemos la respuesta
        respuesta = entrada.readUTF();
        System.out.println( mensaje + nombreCliente);
        System.out.println("Respuesta del servidor: " + respuesta);


        //Cerramos la conexión
        cliente.close();
    }catch (IOException e) {
        System.out.println("Error: "+e.getMessage());
    }   
}
}

1 ответ

Когда вы используете без параметров конструктор ServerSocket() то, что вы получаете, является несвязанным экземпляром. У вас есть 2 варианта:

  • Предоставьте информацию о порте в вызове ServerSocket конструктор

  • Используйте конструктор без параметров, а затем вызовите метод bind. Javadoc объясняет это. Вы должны будете предоставить InetSocketAddress с подробной информацией о сервере и номере порта. InetSocketAddress

Разница между этими двумя методами заключается в том, что второй способ даст вам возможность различать "локальный хост" и любой сетевой адаптер, установленный на вашем ПК. Вы можете захотеть ограничить видимость сокета вашего сервера определенным из них. Очевидно, что это не волшебство, и вы не можете привязать сокет сервера к IP-адресу другой машины, которой вы не управляете, но вы можете привязать к 127.0.0.1 или к 192.168.xx или к любому адаптеру, который вы хотите использовать.

Другие вопросы по тегам