Опять TClientSocket и Asynchronous socket error 10061
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.82] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Опять TClientSocket и Asynchronous socket error 10061
|
Сообщ.
#1
,
|
|
|
|
Пишу клиент мелкий но надо использовать потоковые функции
Надо обойти ненавистную ошибку ?когда к серверу не может достучаться Всегда помогало type=ctNonBlocking, обработчик в OnError и в конце ErrorCode:=0 но в этот раз надо писать и читать не с помощью onRead,onWrite,а стримами и соответственно type=ctNonBlocking нельзя Так вот как бы не выставлял ErrorCode:=0 все равно выскакиевает ошибка во время работы программы:( Как только ставлю в Blocking ошибка исчезает, но как только начинаю читать или писать вылазит Socket Must be in blocking mode Уважаемые гуру, прошу помощи использую Delphi 2007 |
|
Сообщ.
#2
,
|
|
|
|
Цитата socket error 10061 Вообще то эта ошибка как бы к коду не относится :Цитата WSAECONNREFUSED (10061) В подключении отказано – на хосте партнера не работает программа запрашиваемого сервиса |
|
Сообщ.
#3
,
|
|
|
|
Цитата Oleg2004 @ Вообще то эта ошибка как бы к коду не относится : Почему? Очень даже относится. Если бы он не активировал сокет - то и такой ошибки бы не было!!! начинающий, сия ошибка вылезет при отказе в установке соединения только в блокирующем режиме когда сервер, на который "стучишься" не активен. ErrorCode здесь бесполезен т.к. в блокирующем режиме обработка операций на сокете линейна, а не асинхронна и такого события, как впрочем и onRead, onWrite попросту не возникнет. Соответственно, попытки принудительно выполнить данные процедуры приведут к отказу в доступе, что впрочем и наблюдается.Цитата начинающий @ но в этот раз надо писать и читать не с помощью onRead,onWrite,а стримами и соответственно type=ctNonBlocking нельзя Рекомендую посмотреть в сторону TWinSocketStream, а чтобы ошибка при коннекте не "вылазила" (если сервер не активен) - все операции на сокете заключить в блок try...except, где в секции except вызовом WSAGetLastError узнавать код ошибки, вызвавшей исключение, подавлять ее и выдавать пользователю свое сообщение (при необходимости) или предпринимать какие то другие действия. |
|
Сообщ.
#4
,
|
|
|
|
Цитата medved_68 @ Почему? Очень даже относится. Я бы не был столь категоричным Это ошибка на стороне партнера по сети - а не в программе Эта ошибка выскакивает на любой работающей клиентской программе - на любом броузере и тд - если в доступе отказано - и от типа сокета, на котором работает соединение, она категорически не зависит |
|
Сообщ.
#5
,
|
|
|
|
Цитата Oleg2004 @ Это ошибка на стороне партнера по сети - а не в программе Цитата Oleg2004 @ и от типа сокета, на котором работает соединение, она категорически не зависит Спорить было бы глупо. Я упомянул только блокирующий режим потому что у автора при попытках выполнить операции чтения и записи выдавался отказ в доступе. Цитата Oleg2004 @ Я бы не был столь категоричным Цитата medved_68 @ Почему? Очень даже относится. Если бы он не активировал сокет - то и такой ошибки бы не было!!! Отсюда и "категоричность". |
|
Сообщ.
#6
,
|
|
|
|
спасибо, обыграл ситуацию с try ... except ...
что-то типа такого ![]() ![]() Client.Address:=ServerIpCombo.Text; ServerConnection:=0; i:=0; while ((ServerConnection<>1) and (i<20)) do begin try Client.Open; ServerConnection:=1; except on Exception do begin ServerConnection:=-1; inc(i); Sleep(200); Application.ProcessMessages; end; end; end; if (ServerConnection<>1) then begin MemoLog.Lines.Add('No server connection'); Exit; end; |