【问题标题】:Java sockets help client-serverJava 套接字帮助客户端-服务器
【发布时间】:2017-11-01 17:52:43
【问题描述】:

我需要帮助来使用线程进行 Java 练习。 我希望这个程序能够将客户正在写的信息以及他们的姓名和消息时间返回给我。这是我目前拥有的代码。 以同样的方式,我有无法让程序打印的消息 非常感谢,感谢您的帮助。

服务器

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());
    }   
}
}

【问题讨论】:

  • 您的客户端尝试连接到端口 5000,但我在服务器代码中没有看到它绑定到端口 5000 的任何地方?

标签: java multithreading sockets java-threads


【解决方案1】:

当你使用ServerSocket() 的无参数构造函数时,你得到的是一个未绑定的实例。您有 2 个选择:

  • 在调用ServerSocket构造函数时提供端口信息

  • 使用无参数构造函数,然后调用绑定方法。 javadoc 解释了这一点。您必须提供InetSocketAddress,其中包含服务器和端口号的详细信息。 InetSocketAddress

这两种方法之间的区别在于,第二种方法可以让您有机会区分“localhost”和您的 PC 拥有的任何网络适配器。您可能希望将服务器套接字的可见性限制为其中一个特定的。显然这不是魔术,您不能将服务器套接字绑定到您无法控制的另一台机器的 IP,但您可能希望绑定到 127.0.0.1 或 192.168.x.x 或您想使用的任何适配器。

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 2017-02-25
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2017-08-23
    相关资源
    最近更新 更多