Страница 1 из 1
Передать данные по сети
Добавлено: 05.02.2011 23:15:16
ifrost
Добрый вечер!Подскажите пожалуйста самый простой способ передать информацию (строку текста, к примеру) между двумя программами в сети без использования сторонних компонентов.

Какие есть в Lazarus/Free Pascal средства для этого?
Или ,если это проще сделать с использованием сторонних средств (Synapse, Indy, lNet), покажите пожалуйста примерчик с их использованием.
Re: Передать данные по сети
Добавлено: 06.02.2011 14:41:25
Ism
у 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 положить команду которая постоянно слушает сеть и выводит получаемое на консоль
по моему это попроще будет
Re: Передать данные по сети
Добавлено: 07.02.2011 20:56:55
ifrost
Спасибо!Всё таки решил попробовать 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;
Только вот русские символы не хотят передаваться

каким бы ни был второй параметр в функции BytesToString
Re: Передать данные по сети
Добавлено: 08.02.2011 17:11:07
Ism
попробуй AnsiToUtf8(BytesToString(AData, enANSI)) (enANSI это наугад) это при условии что входная кодировка виндовс , тут надо точно понимать что на входе а что на выходе