<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770619</guid>
        <pubDate>Thu, 07 Jul 2005 12:16:11 +0000</pubDate>
        <title>Глючит TSocketClient или я?</title>
        <link>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770619</link>
        <description><![CDATA[Plumbum: 10022: Получен недопустимый аргумент.<br>
  10024: Открыто слишком много сокетов.<br>
  10035: Операция на незаблокированном сокете не может быть завершена немедленно.<br>
  10036: Сейчас выполняется операция блокировки.<br>
  10037: На незаблокированном сокете сделана попытка выполнить операцию при наличии другой выполняемой операции.<br>
  10038: Сделана попытка выполнить операцию на объекте, не являющемся сокетом.<br>
  10039: В операции на сокете пропущен обязательный адрес.<br>
  10040: Сообщение, отправленное на сокет датаграмм, было больше, чем буфер внутренних сообщений или был превышен иной сетевой параметр. Также возможно, что буфер для принятия сообщения был меньше, чем размер сообщения.<br>
  10041: Протокол, указанный в вызове функции сокета, не поддерживает такую семантику для требуемого типа сокета.<br>
  10042: Для вызова getsockopt или setsockopt был указан неизвестный, недопустимый или неподдерживаемый параметр или уровень.<br>
  10043: Требуемый протокол не настроен в данной системе, или не существует его реализации.<br>
  10044: Поддержка указанного типа сокетов в этом семействе адресов отсутствует.<br>
  10045: Предпринятая операция не поддерживается для выбранного типа объекта.<br>
  10046: Данное семейство протоколов не настроено в системе, или оно не реализовано.<br>
  10047: Адрес несовместим с выбранным протоколом.<br>
  10048: Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт).<br>
  10049: Требуемый адрес для своего контекста неверен.<br>
  10050: Операция на сокете обнаружила отключение сети.<br>
  10051: Сделана попытка выполнить операцию на сокете при отключенной сети.<br>
  10052: Подключение было разорвано из-за ошибки во время выполнения операции.<br>
  10053: Программа на вашем хост-компьютере разорвала установленное подключение.<br>
  10054: Удаленный хост принудительно разорвал существующее подключение.<br>
  10055: Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена.<br>
  10056: Сделан запрос на подключение для уже подключенного сокета.<br>
  10057: Запрос на отправку или получение данных  (when sending on a datagram socket using a sendto call) no address was supplied.<br>
  10058: Запрос на отправку или получение данных был запрещен, т.к. сокет уже отключен в данном направлении на основании прежней запроса на его отключение.<br>
  10059: Слишком много ссылок на некоторый ключевой объект.<br>
  10060: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.<br>
  10061: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.<br>
  10062: Не удается преобразовать имя.<br>
  10063: Компонент имени или все имя слишком длинно.<br>
  10064: Произошла ошибка операции на сокете, т.к. конечный хост выключен.<br>
  10065: Сделана попытка выполнить операцию на сокете для недоступного хоста.<br>
  10067: Реализация Windows Sockets может иметь ограничения на количество одновременно выполняющихся приложений.<br>
<br>
Разбей их по категориям (выбери касающиеся тебя) и через Case поймешь разорвано соединение или оно не установилось. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2005-07-07T16:19:23+04:00">07.07.05, 12:19</time></span></span><br>
А зачем тебе при неустановившемся соединении получать -1, а при разрыве выходить из программы. Не проще ли написать процедуру которая ожидает соединение и возобнавляет если оно разорвалось?]]></description>
        <author>Plumbum</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770589</guid>
        <pubDate>Thu, 07 Jul 2005 11:56:58 +0000</pubDate>
        <title>Глючит TSocketClient или я?</title>
        <link>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770589</link>
        <description><![CDATA[Adalon: <strong class='tag-b'>Plumbum</strong><br>
Хорошо.<br>
1. Как мне отловить именно разрывание соединения с сервером при закрытии оного или сетевом сбое?<br>
2. Как мне отловить невозможность соединения?<br>
Ведь после Open программа не ждет результата, а продолжает выполняться. Она может запуститься уже, а OnConnected вызваться чуть позже.<br>
<br>
Вот например если не соединился с сервером клиент то ErrorEvent: 3 /* Scktcomp::eeConnect */<br>
А ErrorCode=10061<br>
<br>
Но почему на другой машине вызывается OnDisconnect? Ведь соедиения не было, т.е. должен быть вызван только OnError.]]></description>
        <author>Adalon</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770532</guid>
        <pubDate>Thu, 07 Jul 2005 11:24:06 +0000</pubDate>
        <title>Глючит TSocketClient или я?</title>
        <link>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770532</link>
        <description><![CDATA[Plumbum: <strong class='tag-b'>Adalon</strong><br>
Событие OnError срабатывает только в шести случаях:<br>
<br>
eeGeneral	          The socket received an error message that does not fit into any of the following categories.<br>
eeSend             An error occurred when trying to write to the socket connection.<br>
eeReceive	          An error occurred when trying to read from the socket connection.<br>
eeConnect          A connection request that was already accepted could not be completed. <br>
eeDisconnect       An error occurred when trying to close a connection.<br>
eeAccept           A problem occurred when trying to accept a client connection request.<br>
<br>
Все остальные тебе нужно ловыить самому либо через Try...Except, либо можешь повесить процедуру на Application.OnException и обрабатывать коды ошибок:     10022, 10024, 10035..10065, 10067 (это всё что касается сети)]]></description>
        <author>Plumbum</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770470</guid>
        <pubDate>Thu, 07 Jul 2005 10:48:14 +0000</pubDate>
        <title>Глючит TSocketClient или я?</title>
        <link>https://forum.sources.ru/index.php?showtopic=101471&amp;view=findpost&amp;p=770470</link>
        <description><![CDATA[Adalon: В общем при старте программа<br>
делает следующее<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ServerConnection=0;</div><div class="code_line">ClientSocket-&#62;Open();</div><div class="code_line">while (ServerConnection==0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Application-&#62;ProcessMessages();</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Т.е. пытается соединиться с сервером.<br>
В OnConnect соответсвенно ServerConnection=1;<br>
В OnError ServerConnection=-1;<br>
Ну и в зависимости от ServerConnection на выходе из цикла мы соединяемся с базой в многопользовательском или монопольном режиме.<br>
Но почему-то на некоторых машинах (WinXP, Win98 не важно) вместо OnError (когда сервер не запущен) вызывается метод OnDisconnect в котором:<br>
<br>
Application-&gt;MessageBox(&quot;Соединение с сервером разорвано&#33;&quot;,&quot;Ошибка&#33;&quot;,MB_OK);<br>
Application-&gt;Terminate();<br>
<br>
И на этих машинах в монопольном режиме программа не запускается вообще.<br>
Почему вызывается OnDisconnect (а не OnError) если сервер не запущен и соединения нет в принципе.<br>
Может мне как-то переделать алгоритм?<br>
Мне нужно если удалось соединение - значит 1, если нет -1. Если разорвано, то выйти из проги.]]></description>
        <author>Adalon</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	