![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый вечер, я в Delphi новичок, так что сильно не пинать-)
Набросал вот такой вот код КЛИЕНТ Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, IdAntiFreezeBase, IdAntiFreeze; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; IdTCPClient1: TIdTCPClient; Edit2: TEdit; Label1: TLabel; Memo1: TMemo; IdAntiFreeze1: TIdAntiFreeze; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add('Подключение к '+Edit1.Text+'...'); idTCPClient1.Host:=Edit1.Text; idTCPClient1.Port:=9393; idTCPClient1.Connect(); if idTcpClient1.Connected then begin Memo1.Lines.Add('Подключился'); Button3.Visible:=True; end; end; procedure TForm1.Button3Click(Sender: TObject); var SO: String; begin if (idTCPClient1.Connected = true) and (Trim(Edit2.Text) <> '') then idTCPClient1.WriteLn(Edit2.Text); SO:= idTCPClient1.ReadLn(); Edit2.Text := ''; Memo1.Lines.Add(SO); end; procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Lines.Add('Отключен от '+Edit1.Text+' ...'); idTCPClient1.Disconnect; Button3.Visible:=false; end; procedure TForm1.FormCreate(Sender: TObject); begin Button3.Visible:=False; end; end. СЕРВЕР Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdAntiFreezeBase, IdAntiFreeze, IdIPWatch; type TForm1 = class(TForm) IdTCPServer1: TIdTCPServer; IdAntiFreeze1: TIdAntiFreeze; IdIPWatch1: TIdIPWatch; procedure IdTCPServer1Execute(AThread: TIdPeerThread); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; ip: string; implementation {$R *.dfm} procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); begin if Athread.Connection.ReadLn=('ping') then begin AThread.Connection.Writeln('ok'); end else if Athread.Connection.ReadLn=('cmd') then begin AThread.Connection.Writeln('Команда CMD выполнена'); end else begin if Athread.Connection.ReadLn=('msg') then begin AThread.Connection.Writeln('фраза показана'); ShowMessage('Сообщение'); end else begin if Athread.Connection.ReadLn=('ip') then ip:=IdIPWatch1.LocalIP; sleep(2000); AThread.Connection.Writeln('IP машины '+ip); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin idTCPServer1.Active:=True; end; procedure TForm1.FormDestroy(Sender: TObject); begin idTCPServer1.Active:=False; end; end. {Старая проблема, решена благодаря Alegun} Проблема в том, что когда я в edit2.text ввожу cmd, то сообщение "все ок" не показывается, но если я делаю так: Код:
procedure TForm1.Button3Click(Sender: TObject); begin idTCPClient1.WriteLn('cmd'); end; РЕШЕНИЕ Код:
procedure TForm1.Button3Click(Sender: TObject); begin idTCPClient1.WriteLn('Edit2.Text'); //Явно лишние кавычки, если только не название едита записывается. end; Последний раз редактировалось snr93, 23.03.2013 в 13:06. |
#2
|
||||
|
||||
![]() Код:
procedure TForm1.Button3Click(Sender: TObject); begin idTCPClient1.WriteLn('Edit2.Text'); //Явно лишние кавычки, если только не название едита записывается. end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Я тоже так думал, но и без кавычек ничего не пашет
|
#4
|
||||
|
||||
![]() Цитата:
Код:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); begin if Athread.Connection.ReadLn = 'cmd' then ShowMessage('все ок'); if Athread.Connection.ReadLn = '' then ShowMessage('Команда пришла пустой'); ShowMessage(Athread.Connection.ReadLn); // Добавить временно end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 23.03.2013 в 01:10. |
#5
|
|||
|
|||
![]() Так, тут заработало, отлично, но вот проблема, когда я подключаюсь и пишу команду cmd, то сервер отвечает после 2-3 отправок этой команды. Как тут быть? Как узнать что сервер принял команду и выполнил? Все что я надумал это:
Сервер при получении сообщения отправляет сообщение клиенту о том что он его понял и услышал, а если клиенту не пришло ответа, то повторить автоматом 3 раза с интервалом 3 секунды и если опять ничего то выдать ответ что неполучилось. Но это занимает много времени. Можно ли как нибудь ускорить процесс проверки услышал ли сервер клиент или нет? |
#6
|
|||
|
|||
![]() собуствую, в гугле забанили...
на линк: http://www.freelancecode.net/communi...opic.php?p=371 |
#7
|
|||
|
|||
![]() P.S. вверху изменил код клиента и сервера.
Очень странно все равно ведет себя сервер. Когда я пишу ping, то он без задержек присылает что все ок, но стоит ввести другую команду, допустим msg, то сервер потухает и ничего не показывает, приходится несколько раз посылать команду, чтобы он ее выполнил. А если послать IP, то все. Программа долго думает и после нескольких отправок команды иногда или зависает, или присылает пустой ip, редко когда бывает что-бы он мне выслал мой ip. Может кто помочь? Мне кажется это из-за корявости кода. P.S.S Кстати, еще у меня windows 7 x64, а делфи для x32, может тут проблема? P.S.S.S Если человек спрашивает на ФОРУМЕ вопрос, то не надо посылать его в гугл, он там вероятнее всего был. Последний раз редактировалось snr93, 23.03.2013 в 13:07. |
#8
|
||||
|
||||
![]() Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#9
|
|||
|
|||
![]() Я не понял где взять компонент FMX который там используется? Это не стандартный indi компонент вроде
|
#10
|
||||
|
||||
![]() Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#11
|
|||
|
|||
![]() Спасибо всем. Посмотрел статью и прислушался к вашим комментариям и сам все переписал как надо без использования FMX и других дополнительных компонентов. Теперь все работает как часы-))
|
#12
|
|||
|
|||
![]() Цитата:
А как ты думаешь, как я нашел страничку, ссылку на которую тебе и дал? Или ты думаешь, что я на память знаю странички с примерами на каждый случай? |
#13
|
||||
|
||||
![]() Цитата:
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |