2012-05-25 3 views
2

Я использую TClientSocket и TServerSocket для связи с сервером, проблема в том, что иногда соединение теряется либо сервером, выдающим мне следующие исключения: Ошибка в WsaSend, нарушение acess и т. Д. Или клиентом : Ошибка асинхронного сокета.Сохранение открытого соединения TCP/IP

Ведьма - лучший способ оправиться от этих ошибок и не открывать соединение.

+0

Я настоятельно рекомендую Инди, не уверен, если сокет компонент все еще сохраняется ... – ComputerSaysNo

+0

Почему вы думаете, что изменение Indy это исправит? –

ответ

5

Нет такой вещи, как «поддержание соединения открытым независимо от того, что». Что делать, если кабель обрезается? Лучшее, что вы можете сделать, это послать пульс на некоторый интервал, чтобы промежуточные маршрутизаторы знали, что вы все еще заинтересованы в использовании этого соединения, и тщательно обрабатывать все ошибки и, при необходимости, восстановить соединение.

1

Большой вопрос ... Что вы получаете это WSAECONNABORTED (Асинхронный Ошибка сокета 10053).

Как предотвратить это в MY-коде? хорошо, есть что-то, что называется Keepalive, если вы внимательно посмотрите на имя Keep-Alive, оно должно поддерживать связь, просто отправьте данные Null в соединение (может быть односторонним), вот и все ...

Я сделал таймер (назвал его TmrKeepAlive) и установил его интервал до 5000 мс (5 секунд), More info on KeepAlive.

Edit: Кроме того, если вы не хотите, чтобы написать свой собственный механизм KeepAlive, проверить this из

Смежные вопросы