Перейти к содержанию
Fire Monkey от А до Я
  • 0

не создается открытый порт на TCP


Вопрос

Добрый день.

Под Windows  этот же код  нормально работает. под Android - нет. когда клиентом пытаюсь подключиться то получаю 10061 ошибку сокета. 

и ошибок приложение под андройд не выдает. пытаюсь создать компонент и получить текст по TCP
 

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdContext,
  IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer,
  FMX.Controls.Presentation, FMX.StdCtrls,IDGlobal, FMX.ScrollBox, FMX.Memo;


type
  // Объявление записи клиента
  TStructureConfig = Record
    TopicName : TStringList;
    MYSQL_Server  : TStringList;
    MYSQL_Port  : TStringList;
    MYSQL_DataBase  : TStringList;
    MYSQL_TableName  : TStringList;
    MYSQL_TableRowName  : TStringList;
    MYSQL_TableRowCount  : TStringList;
    MYSQL_TableWriteTime  : TStringList;
    MYSQL_HTTP_API  : TStringList;
  end;



type
  TForm1 = class(TForm)

 procedure FormCreate(Sender: TObject);

procedure TCPServerOnExecute(AContext: TIdContext);

  private
    { Private declarations }
  public
    { Public declarations }
     Config:TStructureConfig;

   IdTCPServer1:TIdTCPServer;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}




procedure TForm1.FormCreate(Sender: TObject);

begin

form1.Config.TopicName:=TstringList.Create;
form1.Config.MYSQL_Server:=TstringList.Create;
form1.Config.MYSQL_Port:=TstringList.Create;
form1.Config.MYSQL_DataBase:=TstringList.Create;
form1.Config.MYSQL_TableName:=TstringList.Create;
form1.Config.MYSQL_TableRowName:=TstringList.Create;
form1.Config.MYSQL_TableRowCount:=TstringList.Create;
form1.Config.MYSQL_TableWriteTime:=TstringList.Create;
form1.Config.MYSQL_HTTP_API:=TstringList.Create;


IdTCPServer1:=TIdTCPServer.Create(nil);
IdTCPServer1.OnExecute:=form1.TCPServerOnExecute;
//IdTCPServer1.DefaultPort:=5000;
IdTCPServer1.Bindings.Clear;
idTCPserver1.Bindings.Add.Port:=5000;
idTCPserver1.Bindings.Add.IP:='0.0.0.0';


IdTCPServer1.Active:=true;

end;



procedure TForm1.TCPServerOnExecute(AContext: TIdContext);
var
tmp,strText: String;
en:IIDTextEncoding;
h:integer;
st:TstringList;
begin

try

en:=IndyTextEncoding(IdTextEncodingType.encUTF8);
 strText:=AContext.Connection.Socket.ReadLn(en);
strText  := StringReplace(strText, chr(12),chr(13)+chr(10),[rfReplaceAll, rfIgnoreCase]);


st:=TstringList.Create;
st.Text:=strText;
form1.Config.TopicName.Clear;
form1.Config.MYSQL_Server.Clear;
form1.Config.MYSQL_Port.Clear;
form1.Config.MYSQL_DataBase.Clear;
form1.Config.MYSQL_TableName.Clear;
form1.Config.MYSQL_TableRowName.Clear;
form1.Config.MYSQL_TableRowCount.Clear;
form1.Config.MYSQL_TableWriteTime.Clear;
form1.Config.MYSQL_HTTP_API.Clear;



h:=0;
while h<=st.Count-1 do begin




tmp:=st.Strings[h];
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.TopicName.Add(tmp);



tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_Server.Add(tmp);


tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_Port.Add(tmp);


tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_DataBase.Add(tmp);


tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_TableName.Add(tmp);


tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_TableRowName.Add(tmp);


tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_TableRowCount.Add(tmp);



tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_TableWriteTime.Add(tmp);



tmp:=st.Strings[h];
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,1,pos(chr(9),tmp));
delete(tmp,pos(chr(9),tmp),length(tmp));
form1.Config.MYSQL_HTTP_API.Add(tmp);

inc(h);
end;





except
end;


try
st.Free;
except
end;


end;

end.

 

Изменено пользователем Александр Лукьянов (Filament Extruder 1.75)
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Попробуйте проверять запустился ли сервер. К примеру так

function TForm.CreateTCPServer(Var ATCPPort : Word) : Boolean;
begin
  Result:=False;
  FIdTCPServer:=TIdTCPServer.Create;
  FIdTCPServer.OnExecute:=IdTCPServerExecute;
  FIdTCPServer.OnConnect:=IdTCPServerConnect;
  FIdTCPServer.Bindings.Clear;
  with FIdTCPServer.Bindings.Add do
  begin
    IP:='0.0.0.0';
    Port:=ATCPPort;    
  end;
  try
    FIdTCPServer.Active:=True;
  except
    Result:=False;
  end;
  if FIdTCPServer.Active then
    Result:=True;
end;

 

Ссылка на комментарий
  • 0

Да, и следующим кодом

idTCPserver1.Bindings.Add.Port:=5000;
idTCPserver1.Bindings.Add.IP:='0.0.0.0';

вы создаете серверу два интерфейса для прослушки, один с портом 5000 и не определенным адресом, второй с адресом 0.0.0.0 и не определенным портом.

Ссылка на комментарий
  • 0

Active возвращается в true

Если tcpserver1 на форму бросить и не создавать компонент то работает пример. Использую 10.1  berlin. Дома попробую 10.1 update 2 и отпишусь

Ссылка на комментарий
  • 0
4 часа назад, Александр Лукьянов (Filament Extruder 1.75) сказал:

Active возвращается в true

Если tcpserver1 на форму бросить и не создавать компонент то работает пример. Использую 10.1  berlin. Дома попробую 10.1 update 2 и отпишусь

Ну значит точно в биндинге дело, делайте вот так:

FIdTCPServer.Bindings.Clear;
  with FIdTCPServer.Bindings.Add do
  begin
    IP:='0.0.0.0';
    Port:=ATCPPort;    
  end;
  

 

Ссылка на комментарий
  • 0

спасибо. проблема была в этом кажется. 

Изменено пользователем Александр Лукьянов (Filament Extruder 1.75)
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...