0

一部の INDY 通信を動的に作成する際に問題が発生しています。以前に Indy を使用したことがなく、サーバーを正しくセットアップできません。エラー 10061 が表示されます。ファイアウォールにルールを追加して、このアプリケーションとポートを許可しました。TServerSocket と TClientSocket を使用すれば機能しますが、Indy を使用する必要があります。

このコードは機能しません

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'; //gave error when tryingn to use local host
  temp.Add.Port := 20200;

  fIdTCPServer1.Bindings := temp;
  fIdTCPServer1.OnExecute := IdTCPServer1Execute;
  fIdTCPServer1.StartListening();


  fIdTCPClient1.Port := 20200;
  fIdTCPClient1.Host := 'xxx.xx.xxx.xx';//'localhost';
  fIdTCPClient1.Connect;  //error 10061 here

  fIdTCPClient1.IOHandler.WriteLn('Some message');
end;
procedure TForm3.IdTCPServer1Execute(AContext: TIdContext);
var
  inStr : String;

begin
  inStr := AContext.Connection.IOHandler.ReadLn;
  ShowMessage('Server received : ' + inStr);
end;

このコードは機能します

procedure TForm3.Button1Click(Sender: TObject);
begin
  serverSocket1 := TServerSocket.Create(nil);
  clientSocket1 := TClientSocket.Create(nil);

  serverSocket1.Port := 20200;
  serverSocket1.OnClientRead := ServerSocket1ClientRead;
  serverSocket1.Active := True;


  clientSocket1.Port := 20200;
  clientSocket1.Host := 'localhost';
  clientSocket1.Active := True;
  clientSocket1.Socket.SendText('Some message');
end;

procedure TForm3.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  inStr  : String;
begin
  inStr := Socket.ReceiveText();
  ShowMessage('Server received : ' + inStr);
end;
4

2 に答える 2