Форум: "Сети";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизСокеты. Нет коннекта при определенном условии Найти похожие ветки
← →
KasAlex (2003-01-22 15:53) [0]Здравствуйте! У меня такая проблема: Клиентское приложение (TClientSocket) на рабочей станции вяжется с приложением (TServerSocket) на сервере. Связь модемная, устойчивая. Если сначала установить модемную связь, а затем запустить приложение-клиент, то связь через TClientSocket и TServerSocket устанавливается. (IP,порт настроены, в FormShow делается ClientSocket1.Open). Тут все нормально. А если сначала запустить программу, потом установить модемную связь и пытаться из программы по таймеру делать ClientSocket1.Open, то ничего не происходит! На сервере - никаких событий (OnConnect,OnAccept). Глухо!
Подскажите пожалуйста, почему так происходит и как с этим бороться?
← →
mrcat (2003-01-22 16:01) [1]KasAlex © (22.01.03 15:53)
...
почему так происходит и как с этим бороться?
...
где код?
← →
Kasalex (2003-01-22 16:30) [2]Клиент:
procedure TMainFrm.FormShow(Sender: TObject);
begin
Try
Client1.Open;
Except End;
end;
procedure TMainFrm.Timer1Timer(Sender: TObject);
begin
If Client1.Active Then Exit;
Try
Client1.Open;
Except End;
end; // OnTimer(10 second)
Сервер:
procedure TMainFrm.Button1Click(Sender: TObject);
begin
If Server1.Active Then Server1.Close
Else Server1.Open;
end; // Button1Click(Пуск/Стоп)
← →
mrcat (2003-01-22 16:40) [3]что, даже никаких сообщений?
← →
Digitman (2003-01-22 16:51) [4]и это что, весь кл.код ???
а где старт таймера ? к чему он привязан, к какому событию кл.приложения ? и где останов таймера ?
и где обработчик OnError() ?
и вообще - кл.гнездо блокирующее или неблокирующее ?
← →
Kasalex (2003-01-23 10:10) [5]Нет старта таймера. Ни к чему он не привязан. Нет останова таймера. Enabled и все...
Client1.ClientType=ctNonBlocking
Server1.ServerType=ctNonBlocking
Порты одинаковые.
procedure TMainFrm.Client1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Memo1.Lines.Insert(0,"Ошибка связи №"+IntToStr(ErrorCode));
Try
Client1.Close;
Except End; // Try
ErrorCode:=0;
end;
На сервере никаких событий (сообщений) не возникает.
На клиенте, пока модемная связь не установлена, тоже глухо. А вот когда связь устанавливается, при каждой попытке подключения (по таймеру) на клиенте возникает ошибка №10060. На сервере - ничего... Напомню, что если сначала установить модемную связь, а затем запустить клиентское приложение, то все нормально, происходит коннект, можно работать.
← →
Digitman (2003-01-23 10:38) [6]>Нет останова таймера
А если коннект случится, что, так "вхолостую" и будет "молотить" таймер ? Выключай его в событии OnConnect(). А включай так :
procedure TMainFrm.Client1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Memo1.Lines.Insert(0,"Ошибка связи №"+IntToStr(ErrorCode));
Socket.Disconnect(Socket.SocketHandle);
case ErrorCode of
WSAETIMEDOUT, WSAECONNABORTED, WSAECONNRESET:
Timer1.Enabled := True;
end;
ErrorCode:=0;
end;
Включай так же в событии OnDisconnect(), если нужно восстановить коннект после разрыва петли по инициативе сервера
← →
Kasalex (2003-01-23 11:26) [7]ИМХО проблема не в таймере: If Client1.Active Then Exit;
До события OnConnect() дело не доходит! Ошибка 10060 и все тут...
← →
Digitman (2003-01-23 11:58) [8]procedure TMainFrm.FormShow(Sender: TObject);
begin
Timer1Timer(Sender);
end;
procedure TMainFrm.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Client1.Open;
end;
procedure TMainFrm.Client1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Socket.Disconnect(Socket.SocketHandle);
case ErrorCode of
WSAETIMEDOUT, WSAECONNABORTED, WSAECONNRESET:
Timer1.Enabled := True;
else
Memo1.Lines.Insert(0,"Ошибка связи №"+IntToStr(ErrorCode));
end;
ErrorCode:=0;
end;
p.s.
WSAETIMEDOUT = 10060 в этом случае - вполне нормальное явление, ибо время таймаута ожидания коннекта меньше времени на межмодемное соединение ( + еще время на аутентификацию и вход в сеть сервера после установления межмодемного соединения)
← →
Kasalex (2003-01-24 12:08) [9]Огромное спасибо! Кажется все получилось...
← →
Digitman (2003-01-24 12:13) [10]Не за фто)
Носи не стаптывай !))
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c