Имеется сервер и клиент. Сервер может обрабатывать сразу несколько клиентов,но если клиенты закрываются,и заново подключаются то ничего не происходит. В чем может быть проблема?
package com.company;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;
public class ServerLoader {
private static ServerSocket server;
private static Map < Socket, ClietnHandler > handlers = new HashMap < > ();
public static void main(String[] args) throws IOException {
start();
handle();
end();
}
private static void handle() {
int x = 5;
while (true) {
try {
Socket client = server.accept();
ClietnHandler handler = new ClietnHandler(client);
handler.start();
handlers.put(client, handler);
System.out.println(server);
} catch (SocketException ex) {
// return;
} catch (IOException ex) {
ex.printStackTrace();
}
try {
Thread.sleep(10);
} catch (InterruptedException ex) {}
}
}
public static void sendPacket(Socket receiver, String text) {
try {
DataOutputStream dos = new DataOutputStream(receiver.getOutputStream());
dos.writeUTF(text);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void start() {
try {
server = new ServerSocket(8888);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static boolean isStarted() {
return server != null && !server.isClosed();
}
public static void end() {
System.out.println("Close");
try {
server.close();
// server = null;
} catch (IOException ex) {
ex.printStackTrace();
}
System.exit(0);
}
public static ClietnHandler getHandler(Socket socket) {
return handlers.get(socket);
}
public static void invalidate(Socket socket) {
handlers.remove(socket);
}
}
Клиент:
import packet.OPacket;
import java.io.*;
import java.net.Socket;
public class ClientLoader {
private static Socket socket;
public static void main(String[] args) throws IOException {
connect();
handle();
}
public static void sendPacket(OPacket packet) {
try {
ObjectOutputStream dos = new ObjectOutputStream(socket.getOutputStream());
dos.writeObject(packet.getState());
dos.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static Socket getSocket() {
return socket;
}
public static void connect() {
try {
socket = new Socket("localhost", 8888);
System.out.println(socket);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void handle() {
TextFieldTest p = new TextFieldTest();
}
public static void end() {
try {
System.out.println("close clbent");
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
не получается сделать так, чтобы выводились именно строки с длинной меньше средней, не понимаю, как реализовать такую ф-циюДлинны я уже посчитал,...
В моей программе реализован абстрактный класс Users от которого наследуются классы Worker и CustomerЯ хочу создать списки пользователей отдельно...
Требуется написать тесты с использованием restTemplate чтобы протестировать рест-сервисы на спринге
Я хочу поставить на кнопку что-то вроде таймера, то есть у меня есть кнопка, после нажатия она становится неактивной, скажем, на 2 часа, через...