Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
2 / 2 / 1
Регистрация: 23.12.2009
Сообщений: 57
1

Передача записи в indy 10 (tcp)

01.11.2012, 00:26. Показов 5394. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У кого-нибудь есть пример передачи записи по TCP в INDY 10 , так чтобы сервер передавал запись клиенту + интересует как клиент будет это принимать . Я уже все посмотрел , документацию почитал - ничего не понимаю (( сначала клиентское приложение зависало , даже с антифризом , потом сделал через таймер-перестала виснуть , зато не принимает сообщение.. короче я запутался вообще((

делаю вот так

сервер:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 type
  Tsoobshenie = Record
   CenaVopr:integer;
   Vopr:ShortString;
   KolOtv:integer;
   Otvet1:ShortString;
   Otvet2:ShortString;
   Otvet3:ShortString;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Button1.Tag=0) then
   begin
    Button1.Tag:=1;
    IdTCPServer1.DefaultPort:=7777;
    IdTCPServer1.Active:=True;
    Button1.Caption:='отключиться';
   end
 else
  begin
   Button1.Tag:=0;
   Button1.Caption:='подключиться';
   IdTCPServer1.Active:=false;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var SMS : Tsoobshenie;
begin
 with SMS do
  begin
   CenaVopr:=0;
   Vopr:=Memo1.Lines[0];
   KolOtv:=3;
   Otvet1:=Memo2.Lines[0];
   Otvet2:=Memo2.Lines[0];
   Otvet3:=Memo2.Lines[0];
  end;
Button2.Tag:=1;
end;
 
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
 aBuffer: TBytes;
 SMS : Tsoobshenie;
begin
Label1.Caption:='Клиент подключен';
if (Button2.Tag=1) then
 begin
   aBuffer := RawToBytes(SMS,sizeof(SMS));  
   AContext.Connection.Socket.Write(aBuffer);
   Button1.Tag:=0;
 end;
end;
 
end.

клиент
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
type
  Tsoobshenie = Record
   CenaVopr:integer;
   Vopr:ShortString;
   KolOtv:integer;
   Otvet1:ShortString;
   Otvet2:ShortString;
   Otvet3:ShortString;
end;
  .......
 
procedure TKlientMod2Form.FormShow(Sender: TObject);
begin
 try
  IdTCPClient1.Connect;
  Timer1.Enabled:=true;
 except
  on E:
    Exception do
    begin
     MessageDlg ('Ошибка подключения, возможно сервер в отключке', mtError, [mbOk], 0); //on E: Exception do MessageDlg ('Ошибка подключения, возможно сервер в отключке'+#13+E.Message, mtError, [mbOk], 0);
     IdTCPClient1.Disconnect;
    end;
 end;
end;
 
procedure TKlientMod2Form.Timer1Timer(Sender: TObject);
var
  SMS: TSoobshenie;
  Buf: TIdBytes;
  O1,O2,O3:ShortString;
begin
  IdTCPClient1.IOHandler.CheckForDataOnSource;
  while not IdTCPClient1.IOHandler.InputBufferIsEmpty do
    begin
      IdTCPClient1.Socket.ReadBytes(buf,sizeof(SMS),TRUE);
      BytesToRaw(buf, SMS, sizeof(SMS));
      O1 := SMS.otvet1;
      O2 := SMS.otvet2;
      O3 := SMS.otvet3;
      Memo1.Lines[0]:=O1;
      Memo2.Lines[0]:=O2;
      Memo3.Lines[0]:=O3;
    end;
 
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2012, 00:26
Ответы с готовыми решениями:

Indy TCP и код из C#
Здравствуйте! Собственно переписываю часть кода с C# на дельфи, и понять не могу, а понять не могу...

Indy TCP server спамят
Доброе время суток форумчане. столкнулся с такой проблемой, у меня запущен сервер Indy TCP server,...

Indy TCP Server/Client
Кто может привести пример правильно запуска сервера с использование Indy TCP Server, и правильный...

Не могу запустить сервер (indy TCP)
выдает ошибку "could not bind socket. address and port are already in use" код сервера unit...

3
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
01.11.2012, 09:25 2
Создай экз-р Tsoobshenie, заполни строковые поля, подсчитай на калькуляторе размер записи в байтах, сравни с SizeOf(твой_экземпляр), удивись.
1
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
01.11.2012, 16:49 3
У тебя будет все работать только если на момент подключения Button2.Tag=1
1
2 / 2 / 1
Регистрация: 23.12.2009
Сообщений: 57
01.11.2012, 18:39  [ТС] 4
Спасибо большое )) глупая конечно ошибка ))
0
01.11.2012, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2012, 18:39
Помогаю со студенческими работами здесь

Не хочет соединяться по протоколу TCP [Indy]
Здравствуйте, я делаю две программы, одна сервер а другая клиент. Но они никак не соединяются. Как...

Indy TCP Client/Server для Интернета
Сделал простенький клиент и сервер. Сервер отсылает скрин экрана с заданной периодичностью. Клиент...

Работа с Indy TCP. Данные передаются только один раз
Делаю обмен данными между компами в локальной сети. Использую Indy TCP. Коннект устанавливается....

Передача сообщения по локальной сети (indy)
кто знает объясните пожалуйста разницу между TClientSocket-TServerSocket и компонентами indy...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru