Предотвращение сообщения EOF при подключении к сокету Java RMI - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть приложение Java, которое использует RMI для связи клиент / сервер. Для обеспечения этой связи трафик передается через ssh-соединение.

Все работает хорошо, за исключением того, что соединение автоматически закрывается через несколько секунд.

Я установил для свойства keep alive значение:

  • SSHD соединение
  • SSH-клиент
  • ServerSocket на стороне сервера
  • ClientSocket на стороне клиента

Обычная процедура подключения к регистру (порт 4000) и вызова метода для объекта (порт 4005) выводит следующий журнал:

INFO org.apache.sshd.server.session.ServerSession - Authentication succeeded
INFO org.apache.sshd.server.session.ServerSession - Received SSH_MSG_CHANNEL_OPEN direct-tcpip
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Receiving request for direct tcpip: hostToConnect=ThinkPad, portToConnect=4000, originatorIpAddress=127.0.0.1, originatorPort=64539
INFO org.apache.sshd.server.session.ServerSession - Received SSH_MSG_CHANNEL_OPEN direct-tcpip
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Receiving request for direct tcpip: hostToConnect=ThinkPad, portToConnect=4005, originatorIpAddress=127.0.0.1, originatorPort=64540
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Received SSH_MSG_CHANNEL_EOF on channel 1
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_CLOSE on channel 1
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Received SSH_MSG_CHANNEL_CLOSE on channel 1
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 1 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 1 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_EOF on channel 1
INFO org.apache.sshd.server.session.ServerSession - Closing session
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 0 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Closing channel 0 immediately
INFO org.apache.sshd.server.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_EOF on channel 0

Строка ** Получено SSH_MSG_CHANNEL_EOF на канале 1 ** предполагает, что метод, вызванный для объекта, сгенерировал сообщение EOF. Это приводит к закрытию сессии ...

Возможные решения, которые я могу придумать:

  • Перехватить или предотвратить сообщение EOF (но где и как?)
  • Попробуйте настроить фабрику сеансов на стороне сервера, чтобы игнорировать сообщения EOF (чувствует себя неправильно ...)

1 Ответ

0 голосов
/ 07 декабря 2011

Соединения RMI объединяются на клиенте и закрываются, если не используются повторно в течение 15 секунд.Вы можете настроить это поведение через системные свойства: см. Страницу свойств системы Sun, связанную с домашней страницей RMI.

...