Александр Лукьянов (Filament Extruder 1.75) Опубликовано 24 мая, 2018 Опубликовано 24 мая, 2018 (изменено) Добрый день. Под 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. Изменено 24 мая, 2018 пользователем Александр Лукьянов (Filament Extruder 1.75) Цитата
0 Евгений Корепов Опубликовано 24 мая, 2018 Опубликовано 24 мая, 2018 Попробуйте проверять запустился ли сервер. К примеру так 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 Евгений Корепов Опубликовано 24 мая, 2018 Опубликовано 24 мая, 2018 Да, и следующим кодом idTCPserver1.Bindings.Add.Port:=5000; idTCPserver1.Bindings.Add.IP:='0.0.0.0'; вы создаете серверу два интерфейса для прослушки, один с портом 5000 и не определенным адресом, второй с адресом 0.0.0.0 и не определенным портом. Цитата
0 Александр Лукьянов (Filament Extruder 1.75) Опубликовано 24 мая, 2018 Автор Опубликовано 24 мая, 2018 Active возвращается в true Если tcpserver1 на форму бросить и не создавать компонент то работает пример. Использую 10.1 berlin. Дома попробую 10.1 update 2 и отпишусь Цитата
0 Евгений Корепов Опубликовано 24 мая, 2018 Опубликовано 24 мая, 2018 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; Ingalime 1 Цитата
0 Александр Лукьянов (Filament Extruder 1.75) Опубликовано 24 мая, 2018 Автор Опубликовано 24 мая, 2018 (изменено) спасибо. проблема была в этом кажется. Изменено 24 мая, 2018 пользователем Александр Лукьянов (Filament Extruder 1.75) Цитата
Вопрос
Александр Лукьянов (Filament Extruder 1.75)
Добрый день.
Под 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)5 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.