Передать данные по сети

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Передать данные по сети

Сообщение ifrost » 06.02.2011 00:15:16

Добрый вечер!
Подскажите пожалуйста самый простой способ передать информацию (строку текста, к примеру) между двумя программами в сети без использования сторонних компонентов. :roll:
Какие есть в Lazarus/Free Pascal средства для этого?
Или ,если это проще сделать с использованием сторонних средств (Synapse, Indy, lNet), покажите пожалуйста примерчик с их использованием.
ifrost
новенький
 
Сообщения: 21
Зарегистрирован: 13.11.2009 09:19:51

Re: Передать данные по сети

Сообщение Ism » 06.02.2011 15:41:25

у indy есть на сайте примеры

Как вариант можно использовать утилиту netcat и компонент AsyncProcess лазаруса (в нем есть возможность получать данные выводимые командой в консоль)

netcat для windows

http://www.cygwin.com/


пример получения данных посланных в AsyncProcess

Код: Выделить всё
procedure TForm1.AsyncProcess1ReadData(Sender: TObject);
var
  i:byte;
begin
  i:=AsyncProcess1.Output.ReadByte;
  if (i=10) or (i=0) then
  begin
    Memo1.Append(pipe_str);
    pipe_str:='';
  end else pipe_str:= pipe_str+char (i);
end;                   


Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
begin 
  AsyncProcess1.Execute;
  pipe_str:='';
end;   


в свойстве AsyncProcess1.CommandLine положить команду которая постоянно слушает сеть и выводит получаемое на консоль

по моему это попроще будет
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Передать данные по сети

Сообщение ifrost » 07.02.2011 21:56:55

Спасибо!
Всё таки решил попробовать Indy :)

Так отправляю:
Код: Выделить всё
procedure TForm1.btnSendClick(Sender: TObject);
begin
  if Trim(edMsg.Text) <> '' then
  begin
    UDPClient.Active := False;
    try
      UDPClient.Host := edHost.Text;
      UDPClient.Port := StrToInt(edPort.Text);
      UDPClient.Active := True;
      UDPClient.Send(edMsg.Text);
    finally
      UDPClient.Active := False;
    end;
  end;
end;
Так читаю:
Код: Выделить всё
procedure TForm1.UDPServerUDPRead(AThread: TIdUDPListenerThread;
  AData: TIdBytes; ABinding: TIdSocketHandle);
begin
   Memo1.Lines.Add(BytesToString(AData, enUTF8));
end;

Только вот русские символы не хотят передаваться :roll: каким бы ни был второй параметр в функции BytesToString
ifrost
новенький
 
Сообщения: 21
Зарегистрирован: 13.11.2009 09:19:51

Re: Передать данные по сети

Сообщение Ism » 08.02.2011 18:11:07

попробуй AnsiToUtf8(BytesToString(AData, enANSI)) (enANSI это наугад) это при условии что входная кодировка виндовс , тут надо точно понимать что на входе а что на выходе
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru