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

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

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 19:46   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Может использовать SendBuffer?
Человек_Борща вне форума Ответить с цитированием
Старый 13.02.2013, 22:16   #12
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
RecieveBuffer будет ждать ответа в случае посыла данных.
Если просто вызвать RecieveBuff, то будет ждать. А тут - уже сообщение пришло, что данные готовы, надо читать. RecieveBuff [а лучше в данном случае RecieveString] сразу прочитает и вернёт строку из буфера и очистит его, подготовив к новому приёму данных.
FataLL вне форума Ответить с цитированием
Старый 13.02.2013, 22:20   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну пипетццц
Простой код:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses  IdUDPServer, IDGlobal,IdSocketHandle, IdUDPClient,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
    serv:TIdUDPServer;
    cli:TIdUDPClient;
    procedure rea(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  serv:=TIdUDPServer.Create;
  serv.DefaultPort:=9981;
  serv.OnUDPRead:=@rea;
  serv.Active:=true;

  cli:=TIdUDPClient.Create;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  cli.Send('localhost',9981,TimeToStr(now));
end;

procedure TForm1.rea(AThread: TIdUDPListenerThread; AData: TIdBytes;
  ABinding: TIdSocketHandle);
var s:string;i:integer;
begin
 for i:=low(AData) to high(AData) do s:=s+chr(AData[i]);
 Caption:=s;
end;

end.
Четенько работает как ни в чем не бывало...
Короче я так понимаю что мне нужно искать проблему в самом проекте...

Кстати, а как у Синапса обстоит дело с UDP?
И еще попутно: INDY и Synapse есть для работы под линуксом?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2013, 00:56   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Инди спокойно ставится в лазарус ровно как и синапс. А вот насчет линукса - это не знаю. Но должно быть решение. Базовый TCP есть в лазарусе.

TIdBytes потомок TBytes в поздних версиях delphi. Для них есть методы StringOf и BytesOf. Поищите в пакете индей.
Человек_Борща вне форума Ответить с цитированием
Старый 14.02.2013, 09:53   #15
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Код:
procedure TForm1.rea(AThread: TIdUDPListenerThread; AData: TIdBytes;
  ABinding: TIdSocketHandle);
var s:string;i:integer;
begin
 //for i:=low(AData) to high(AData) do s:=s+chr(AData[i]);
 s := serv.RecieveString(); // немедленно считает и очистит приёмный буфер
 Caption:=s;
end;
FataLL вне форума Ответить с цитированием
Старый 14.02.2013, 13:00   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Для них есть методы StringOf и BytesOf.
Тьху ты... Ну точно. Впрочем я выкрутился процедурой Move() как в старые добрые времена
Цитата:
немедленно считает и очистит приёмный буфер
А похоже не в нем дело было...
Где-то в проекте я чего-то не учел, поскольку на новом проекте пока что таких сбоев нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: String[1]: the Size property has an invalid size of 0. mrChester Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 18.01.2012 20:06
[SIZE="4"]Найти максимальное число y Delphi[/SIZE] Артем1904 Помощь студентам 5 16.12.2011 10:22
Резиновый font-size, Как сделать резионвый font-size в блоке? AlienNation HTML и CSS 0 26.09.2011 09:14
Передавать большие файлы через IdUDP SoftKoc Работа с сетью в Delphi 6 20.11.2010 14:05