Я работаю с двумя java-процессами, которые общаются через сокеты.java socket connection blocking process
Со стороны сервера, я использую эту возможность для передачи информации:
public void send(Serializable order)
{
try
{
if (this.clientSocket != null && this.clientSocket.isBound() && this.clientSocket.isConnected())
{
String json = "";
json = mapper.writeValueAsString(order);
log.info("sending to client : " + order.getClass());
json = convertToUTF8(json);
this.output.write(json + "\n");
this.output.flush();
log.info("Message sent to client");
}
else
{
log.info("no client connected");
}
}
catch (Exception e)
{
log.fatal("Exception while trying to send message to client : " + e.getMessage(), e);
}
}
выхода здесь:
private BufferedWriter output;
А на стороне клиента, я стараюсь читать данные так:
while (this.running)
{
try
{
String msg = in.readLine();
log.debug("MSG VALUE IS : |"+msg+"|\n\n**********\n");
if ("".equalsIgnoreCase(msg) || msg == null)
{
break;
}
здесь:
private BufferedReader in;
Проблема здесь через некоторое время, серверный процесс блокируется, ANS, если я бег Netstat команды, я могу видеть, что RECV-Q и отправить-Q значение не 0.
Но я не может воспроизвести ситуацию, поэтому мне интересно, что создает эту ситуацию, является ли способ справиться с этим или мне нужно изменить способ чтения данных?
Заранее спасибо.
Я думаю, что это не родственник проблемы нити, как я только один клиент позволил в то время, так что мой ServerSocket и гнездо в том же потоке, что может быть непрерывно работает для за несколько дней до укладки в сокет, и я не знаю, как проверить, что не так, поскольку у меня нет исключений, ни на стороне сервера, ни на стороне клиента, все застревает, пока я не убью один из процессов (и согласно netstat соединение все еще установлено) – Sylvain