Нелегко понять ваш код (я думаю, что он португальский или испанский).Кажется, проблема в EjecutarServidor
, у вас есть 3 статических атрибута:
private static ServerSocket listener;
private static Socket socket;
private static Boolean EsperarConexiones
Если подключается новый клиент, вы просто сбрасываете ссылку на прежний сокет клиента:
socket = null;
socket = listener.accept();
Это может не работать, когда несколько клиентов подключаются одновременно, так как ссылка на socket
может разрываться между
socket = listener.accept();
и
ManejoConexion con_nva = new ManejoConexion(socket);
Определение listener
как статического атрибута определенно нехорошая практика, но должна работать с учетом ваших образцов.Но определение статического socket
определенно является ошибкой и может привести к неожиданным результатам.Вы должны переместить объявление Socket
в EjecutarServidor.ejecutar()
, например:
while(EsperarConexiones){
Socket socket = listener.accept(); //<-- fix HERE
Panel_mensajes.MostrarMensaje("NUEVA CONEXION " +
socket.getInetAddress().toString().replace("/", "") + ":"
+ socket.getPort() + ", "
+ fecha.getTime() + "\n" + "\n"
);
ManejoConexion con_nva = new ManejoConexion(socket);
iniciarThread.execute(con_nva);
}
Исправьте это и посмотрите, не изменит ли оно поведение вашего приложения.