Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление Ошибки 10061 в Indy: Настройка Привязок и Управление Сокетами в Delphi

Delphi , Интернет и Сети , Сокеты

Описание проблемы

При работе с компонентами Indy для создания серверов и клиентов в Delphi, пользователи могут столкнуться с ошибкой 10061. Это может происходить, когда настройки сервера выполнены некорректно. Ошибка 10061 обычно указывает на проблему с сетевым подключением, например, отсутствие прослушивания сервера или ошибка в настройках брандмауэра. Несмотря на то, что пользователь добавил правило в брандмауэр для разрешения приложения и порта, проблема сохраняется. Однако, при использовании стандартных компонентов TServerSocket и TClientSocket, все работает корректно. Это указывает на возможную ошибку в коде, использующем Indy.

Пример кода, вызывающего ошибку

В представленном коде для создания сервера и клиента с использованием Indy, сервер пытается прослушивать порт, но клиент не может подключиться, получая ошибку 10061.

procedure TForm3.Button3Click(Sender: TObject);
var
  temp          : TIdSocketHandles;
begin
  fIdTCPServer1 := TIdTCPServer.Create(nil);
  fIdTCPClient1 := TIdTCPClient.Create(nil);
  temp := TIdSocketHandles.Create(fIdTCPServer1);
  temp.Add.IP := 'xxx.xx.xxx.xx';//'localhost';
  temp.Add.Port := 20200;
  // ...
  fIdTCPClient1.Connect;  //error 10061 here
  // ...
end;

Пример кода, который работает

В этом примере с использованием TServerSocket и TClientSocket, сокеты настраиваются и активируются корректно, и подключение клиента к серверу выполняется успешно.

procedure TForm3.Button1Click(Sender: TObject);
begin
  serverSocket1 := TServerSocket.Create(nil);
  clientSocket1 := TClientSocket.Create(nil);
  // ...
  serverSocket1.Active := True;
  // ...
  clientSocket1.Active := True;
  clientSocket1.Socket.SendText('Some message');
  // ...
end;

Ошибки в коде и их исправление

Проблема в исходном коде заключается в неправильной настройке привязок сервера и отсутствии активации сервера. Также, в коде присутствуют потенциальные утечки памяти и использование не потокобезопасных функций. Для исправления ошибки необходимо:

  1. Правильно настроить привязки сервера, указав как IP-адрес, так и порт для каждой привязки.
  2. Активировать сервер, установив свойство Active в True.
  3. Использовать потокобезопасные функции для работы с сообщениями.

Исправленный код

Вот пример исправленного кода, который настраивает сервер и клиента с использованием Indy:

procedure TForm3.Button3Click(Sender: TObject);
var
  temp : TIdSocketHandle;
begin
  if fIdTCPServer1 = nil then
  begin
    fIdTCPServer1 := TIdTCPServer.Create(Self);
    with fIdTCPServer1.Bindings.Add do
    begin
      IP := '127.0.0.1'; // Используйте IP-адрес, не имя хоста. localhost = 127.0.0.1
      Port := 20200;
    end;
    fIdTCPServer1.OnExecute := IdTCPServer1Execute;
    fIdTCPServer1.Active := True;
  end;
  // ...
  if fIdTCPClient1 = nil then
  begin
    fIdTCPClient1 := TIdTCPClient.Create(Self);
    fIdTCPClient1.Port := 20200;
    fIdTCPClient1.Host := 'xxx.xx.xxx.xx';
  end;
  fIdTCPClient1.Connect;
  fIdTCPClient1.IOHandler.WriteLn('Some message');
end;
procedure TForm3.IdTCPServer1Execute(AContext: TIdContext);
var
  inStr : String;
begin
  inStr := AContext.Connection.IOHandler.ReadLn;
  Windows.MessageBox(0, PChar(inStr), PChar('Server received'), MB_OK);
end;

Заключение

При работе с Indy важно правильно настроить привязки сервера и активировать компоненты. Использование потокобезопасных функций и корректное управление ресурсами позволит избежать ошибок, таких как 10061, и обеспечит стабильную работу сетевых приложений в Delphi.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с ошибкой 10061 при настройке сервера и клиента в Delphi с использованием компонентов Indy, связанной с неправильной конфигурацией сетевых компонентов и возможными проблемами на уровне операционной системы, и ищет спос


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сокеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 07:52:36/0.0053000450134277/1