
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.147] |
![]() |
|
Сообщ.
#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 @ Вообще то эта ошибка как бы к коду не относится : Почему? Очень даже относится. Если бы он не активировал сокет - то и такой ошибки бы не было!!! ![]() ![]() Цитата начинающий @ но в этот раз надо писать и читать не с помощью 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; |