你看,我有我的 Connection 类,它已经设置了所有东西,我的客户端类和我的服务器类。
服务器:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Servidor extends Conexion //Se hereda de conexión para hacer uso de los sockets y demás
{
public Servidor() throws IOException{super("servidor");} //Se usa el constructor para servidor de Conexion
public void startServer()//Método para iniciar el servidor
{
try
{
System.out.println("Esperando..."); //Esperando conexión
cs = ss.accept(); //Accept comienza el socket y espera una conexión desde un cliente
System.out.println("Cliente en línea");
//Se obtiene el flujo de salida del cliente para enviarle mensajes
salidaCliente = new DataOutputStream(cs.getOutputStream());
//Se le envía un mensaje al cliente usando su flujo de salida
salidaCliente.writeUTF("Petición recibida y aceptada");
//Se obtiene el flujo entrante desde el cliente
BufferedReader entrada = new BufferedReader(new InputStreamReader(cs.getInputStream()));
while((mensajeServidor = entrada.readLine()) != null) //Mientras haya mensajes desde el cliente
{
if( mensajeServidor.equals("salir")){
break;
}
//Se muestra por pantalla el mensaje recibido
System.out.println(mensajeServidor);
}
System.out.println("Fin de la conexión");
ss.close();//Se finaliza la conexión con el cliente
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
我的客户类:
import java.io.DataOutputStream;
import java.io.IOException;
public class Cliente extends Conexion
{
public Cliente() throws IOException{super("cliente");} //Se usa el constructor para cliente de Conexion
public void startClient() //Método para iniciar el cliente
{
try
{
//Flujo de datos hacia el servidor
salidaServidor = new DataOutputStream(cs.getOutputStream());
//Se enviarán dos mensajes
for (int i = 0; i < 2; i++)
{
//Se escribe en el servidor usando su flujo de datos
salidaServidor.writeUTF("Este es el mensaje número " + (i+1) + "\n");
}
cs.close();//Fin de la conexión
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
我从两个测试类(TestServidor 和 TestCliente)中进行了测试,我首先运行了 TestServidor,然后服务器启动并等待客户端。然后我运行TestCliente,它显示了它应该显示的消息,它关闭了连接,就是这样。如果我想再次测试它,我必须再次运行 TestServer 和 TestClient。这些测试在本地主机上。
我该如何做到这一点,以便服务器始终在监听并且只运行一次 TestServer 和我想要的多次 TestClient?
我怎样才能让它接收多个请求?例如,他总是在楼上监听服务器,而我可以从另一台具有另一个 IP 的计算机上联系到他?
对于服务器接受多个连接,通常遵循这样的结构
其中 ThreadToTreatClient 将是一个从 Thread 继承的类,并执行与套接字有关的任何事情来处理客户端。