Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 16:05   #1
Alex_C
Пользователь
 
Регистрация: 11.12.2006
Сообщений: 10
По умолчанию Переподключение к телнет-серверу

Проблема: есть несколько телнет серверов. Если один из них недоступен - надо чтоб программа переключилась на другой.
Что не получается: если обращаемся к нерабочему серверу, а потом к рабочему, то у рабочего сервера выскакивает ошибка 100049, при повторном обращении к рабочему - подключение !

Пример тестового кода

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure ClientOnConnected(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientOnConnecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientOnDisconnected(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientOnError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: integer);
    procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  TelnetSocket: TClientSocket;

implementation

{$R *.dfm}

//on connecting to server process

procedure TForm1.ClientOnConnecting(Sender: TObject; Socket: TCustomWinSocket);
var
  S: string;
begin
  if TelnetSocket.Host = '' then
    S := TelnetSocket.Address
  else
    S := TelnetSocket.Host;

  Memo1.Lines.Add('Connecting to server [' + S + ']');
end;

//on connected to server process

procedure TForm1.ClientOnConnected(Sender: TObject; Socket: TCustomWinSocket);
var
  S: string;
begin
  if TelnetSocket.Host = '' then
    S := TelnetSocket.Address
  else
    S := TelnetSocket.Host;

  Memo1.Lines.Add('Server of connected : ' + S);

  TelnetSocket.Socket.SendText('RX4HX' + #10 + #13);
end;

//on disconnect from server

procedure TForm1.ClientOnDisconnected(Sender: TObject; Socket: TCustomWinSocket);
var
  S: string;
begin
  if TelnetSocket.Host = '' then
    S := TelnetSocket.Address
  else
    S := TelnetSocket.Host;

  Memo1.Lines.Add('Disconnected from server [' + S + ']');
end;

//on read from socket

procedure TForm1.ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add(Socket.ReceiveText);
end;

//on client error

procedure TForm1.ClientOnError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: integer);
var
  ErrStr: string;
begin
  case ErrorEvent of
    eeGeneral: ErrStr := 'General Error';
    eeSend: ErrStr    := 'Send Error';
    eeReceive: ErrStr := 'Receive Error';
    eeConnect: ErrStr := 'Connect Error';
    eeDisconnect: ErrStr := 'Disconnect Error';
    eeAccept: ErrStr  := 'Accept Error';
    eeLookup: ErrStr  := 'Lookup Error';
  end;

  Memo1.Lines.Add('Error Type : ' + ErrStr +
    ', Error Code : ' + IntToStr(ErrorCode));
  ErrorCode := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Создаем сокет телнета
  TelnetSocket := TClientSocket.Create(Self);
  TelnetSocket.OnConnecting := ClientOnConnecting;
  TelnetSocket.OnConnect := ClientOnConnected;
  TelnetSocket.OnDisconnect := ClientOnDisconnected;
  TelnetSocket.OnRead := ClientOnRead;
  TelnetSocket.OnError := ClientOnError;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if TelnetSocket.Active then
    TelnetSocket.Socket.Close;
  TelnetSocket.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TelnetSocket.Host   := '1yu1exy.org';
  TelnetSocket.Port   := 8000;
  TelnetSocket.Active := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TelnetSocket.Host   := 'rn6bn.73.ru';
  TelnetSocket.Port   := 23;
  TelnetSocket.Active := True;
end;

end.
Форма - на ней 2 кнопки и мемо.
Button1 - с несуществующим адресом, Button2 - с работающим.

1.Нажмите на Button2 - произойдет соединение с сервером.
2.Затем нажмите на Button1 - выдаст ошибку Lookup server.
3.Нажмите опять на Button2 - выдаст ошибку 100049
4. и опять на Button2 - произойдет соединение.

Не пойму, почему сразу не происходит соединение на шаге 3?
Alex_C вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы к серверу xPAL Работа с сетью в Delphi 2 14.10.2008 19:39
Возврат управления телнет-приложению imdb Работа с сетью в Delphi 2 26.05.2008 11:16
Подключение к серверу Artem Работа с сетью в Delphi 4 11.11.2007 09:27
Помогите подключиться к серверу. КривойПрограммист Помощь студентам 1 27.10.2007 23:41