Я думал об этом весь день, я действительно не думаю, что если Название правильное, но вот оно, позвольте мне объяснить мою ситуацию: Я работаю над проектом, сервером, созданным на Java для клиентов, созданных в Delphi , Conections хороши, несколько клиентов со своими потоками, работа с i/o работает хорошо. Клиенты отправляют строки на сервер, который я читаю с помощью BufferedReader. В зависимости от зарезервированных слов, которые получает сервер, он делает действие. Прежде чем клиент отправит строку, он вставляет информацию в базу данных SQL Server, чтобы сервер мог пойти и проверить ее после получения заказа/команды через сокет. Сервер получает информацию в базе данных, обрабатывает ее и отправляет ее ... назовем ее «Темная сторона».Как получить объект сокета без ссылочной переменной?
В тот момент, когда транзакция завершена, и информация отправляется на темную сторону, сервер вставляет информацию ... кашель, темную информацию в таблицу базы данных, чтобы клиент мог пойти и взять то, что он запросил , НО, мне нужно сообщить об этом клиенту! («Эй, еще раз проверьте базу данных, что вам нужно: 3»).
Коннектор, гнездо изготовлено в другом классе. Не тот, который я хочу использовать для ответа клиенту, поэтому, если у меня нет сокета, у меня нет OutputStream, о котором мне нужно поговорить. Этот класс, который обрабатывает и отправляет информацию в темную сторону, будет работать со сто транзакций в группе.
Моя проблема здесь: я не могу сообщить клиенту, что это сделано, потому что у меня нет ссылок сокетов в этом классе. Я упоминаю клиенты нити как:
new Client(socket).start();
объектов без ссылок переменных, но, у меня есть возможность, я могу принять: Храните сокеты и их IP-адреса в объекте HashMap в тот момент, что новое соединение сделано, как это:
sockets.put(newSocket.getInetAddress().getHostAddress(), newSocket);
Тогда я могу получить сокет (так что я могу получить OutputStream и ответ), призывающую статический метод, как это:
public static Socket getSocket(String IP) {
Socket RequestedSocket;
RequestedSocket = sockets.get(IP);
return RequestedSocket;
}
Но я хочу, чтобы вы сказать мне, если есть это лучший способ сделать это, лучше, чем хранить все эти сокеты в списке/hashmap. Как я могу получить эти объекты без ссылочных переменных? Или, может быть, это хороший способ сделать это, и я просто пытаюсь преодолеть пределы.
P.S .: Я попытался сохранить объекты клиента в базе данных, сериализуя их, но сокеты не могут быть сериализованы.
Спасибо.
, что удерживает вас от сохранения ссылки в классе 'под клиентом? – A4L
В классе клиента есть ссылка (new Client()), но у меня нет всех ссылок для классов Client. Спасибо, что ответили – user2245180
. Я предлагаю вам отслеживать ваши клиенты каким-то образом, а не сокеты, а затем добавлять метод к классу «Клиент» для уведомления клиентов, например «Уведомление клиента № (« данные доступны ») ' – A4L