我需要帮助来做线程的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());
}
}
}
当你使用 ServerSocket()
的无参数构造函数时,你得到的是一个未绑定的实例。 您有 2 个选择:
-
在对
ServerSocket
构造函数的调用中提供端口信息 -
使用无参数构造函数,然后调用绑定方法。 javadoc 对此进行了解释。 您必须提供包含服务器和端口号详细信息的
InetSocketAddress
。InetSocketAddress
这两种方法之间的区别在于,第二种方法将使您有机会区分" localhost"和PC具有的任何网络适配器。 您可能希望将服务器套接字的可见性限制为其中的特定套接字。 显然这不是魔法,您无法将服务器套接字绑定到您无法控制的另一台机器的 IP,但您可能希望绑定到 127.0.0.1 或 192.168.x.x 或任何您想要使用的适配器。