Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 17:13   #1
Andrey_RTF
Пользователь
 
Регистрация: 26.05.2012
Сообщений: 22
По умолчанию Организация сетевого обмена (Delphi)

Привет всем. Необходимо разработать программку - своего рода "интерфейс пользователя", которая в зависимости от полученных данных из сети выполняла бы какое либо действие. Это я так вобщем описал саму суть, теперь поподробнее.

Допустим имеется устройство (устройсвом выступает микроконтроллер который опрашивает датчики), которое по сети отправляет данные (в роли данных будут выступать цифры), требуется разработать программу, которая принимала бы эти данные, и в зависимости от полученных "цифр" выполняла бы какое либо действие. Самого устройсва нет, поэтому будет разработана еще одна "программа-эмулятор" которая отправляет данные в сеть.

Собственно суть. Обе программы готовы, но "общаются" между собой посредством COM-портов и виртуального соединения этих портов. А мне необходимо организовать связь этих программ с помощью LAN (TCP\IP) соединения. А данная тема (LAN) для меня темный лес.

Прошу помощи в данном вопросе.
Andrey_RTF вне форума Ответить с цитированием
Старый 26.05.2012, 17:18   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Юзай IdTCPClient и IdTCPServer от Indy.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 26.05.2012, 17:23   #3
Andrey_RTF
Пользователь
 
Регистрация: 26.05.2012
Сообщений: 22
По умолчанию

Спасибо. А там сложно вообще разобраться или не сложнее чем с СОМ-портом??))

Еще забыл спросить - есть ли какая прога для виртуального соединения IP (я просто пишу и проверяю проги на одном компе) или она мне не понадобится??

Последний раз редактировалось Stilet; 26.05.2012 в 19:22.
Andrey_RTF вне форума Ответить с цитированием
Старый 26.05.2012, 18:58   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Сообщение от Andrey_RTF Посмотреть сообщение
Спасибо. А там сложно вообще разобраться или не сложнее чем с СОМ-портом??))
Я с СОМ не работал, такчто незнаю.
Если нужно тупо передавать одну строку, то там вообще ерунда писать.

Цитата:
Еще забыл спросить - есть ли какая прога для виртуального соединения IP (я просто пишу и проверяю проги на одном компе) или она мне не понадобится??
Неочень понял вопрос. Если имеется ввиду как тестировать, то там просто указываешь ip и порт соединения. Чтоб тестировать на одном компе нужно просто писать в ip 127.0.0.1.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 26.05.2012, 21:40   #5
Andrey_RTF
Пользователь
 
Регистрация: 26.05.2012
Сообщений: 22
По умолчанию

Valio спасибо за подсказки. Я уже начал разбираться с Indy и понял что для связки двух программ никакого виртуального подключения не нужно.

P.S. Походу реализация этого интерфейса полегче СОМ-порта будет)))
Andrey_RTF вне форума Ответить с цитированием
Старый 26.05.2012, 23:58   #6
Andrey_RTF
Пользователь
 
Регистрация: 26.05.2012
Сообщений: 22
По умолчанию

Начал разбираться я с Indy и возникли вопросы. Накидал две оболочки:

Сервер:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Memo1: TMemo;
    procedure IdTCPServer1Connect(AThread: TIdPeerThread);
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
Memo1.Lines.Add('Connect');
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
Memo1.Clear;
Memo1.Lines.Add(athread.Connection.ReadLn());
Athread.Connection.Disconnect;
end;

end.

Клиент:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls;

type
  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect();
IdTCPClient1.SendCmd(Edit1.Text);
IdTCPClient1.Disconnect;
end;

end.

Все работает - данные из Edit передается в Memo, но после каждого нажатия кнопки выскакивает сообщение Connection Closed Gracefully. Я так понимаю это информационное сообщение. У меня вопрос - как сделать так чтобы оно не появлялось???
Andrey_RTF вне форума Ответить с цитированием
Старый 27.05.2012, 00:25   #7
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

А зачем ты постоянно дисконект делаешь? Приконектись и сиди на порту.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 27.05.2012, 00:31   #8
Andrey_RTF
Пользователь
 
Регистрация: 26.05.2012
Сообщений: 22
По умолчанию

Я так и понял что это из за дисконнекта, пробовал закоментить эти строчки:
Клиент:
Код:
IdTCPClient1.Disconnect;
Сервер:
Код:
Athread.Connection.Disconnect;
Но в результате этих операций "клиент" зависает...
Andrey_RTF вне форума Ответить с цитированием
Старый 27.05.2012, 00:58   #9
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Даж незнаю. Попробуй через IdTCPClient1.Write() передавать заместо SendCmd.

У меня версия инди поновее, там просто подругому всё реализовано.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 27.05.2012, 01:49   #10
Andrey_RTF
Пользователь
 
Регистрация: 26.05.2012
Сообщений: 22
По умолчанию

У меня все таки получилось одолеть это дело)))
Вот код:

Клиент:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls;

type
  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  begin
    with IdTCPClient1 do
    try
    Connect;
    WriteLn(Edit1.Text);
    finally
    Disconnect;
    end;
  end;
end.
Сервер:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Memo1: TMemo;
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
zapros:string;
begin
zapros:=AThread.Connection.ReadLn();
memo1.Lines.Clear;
memo1.Lines.Add(zapros);
end;
end.
Теперь буду заниматься обработчиками событий на "сервере")))

Последний раз редактировалось Andrey_RTF; 27.05.2012 в 01:52.
Andrey_RTF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать буфер-обмена в Delphi Ylenol Помощь студентам 0 12.06.2011 12:47
Буфер обмена в Delphi )Игнат( Общие вопросы Delphi 8 12.07.2010 23:01
Delphi vs. Буфер обмена dacorp Помощь студентам 2 04.07.2010 17:46
Подключение сетевого диска (delphi) VadEr Работа с сетью в Delphi 9 09.10.2009 11:14