Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Как граматно отправлять и принимать данные через сокеты?   Найти похожие ветки 

 
@Ujin ©   (2004-04-09 22:04) [0]

Вот, пробую сделать так:

type
 PCmdHeader = ^TCmdHeader;
 TCmdHeader = record
   BufferSize: Integer;
   Cmd: Integer;
 end;

...

// Это кнопочка Send...
procedure TForm2.Button1Click(Sender: TObject);
var cmdh: TCmdHeader;
   Data: PChar;
begin
 Clt.Active := true;
   cmdh.Cmd := StrToInt(Edit2.Text);
   Data := PChar(Edit1.Text);
   cmdh.BufferSize := SizeOf(Data);
   cmdh.Data := Data;
 if Clt.Connect then begin
   Clt.SendBuf(cmdh, SizeOf(cmdh));
   Clt.SendBuf(Data, SizeOf(Data));
 end;
 Clt.Active := false;
end;

procedure TForm2.SrvAccept(Sender: TObject; ClientSocket: TCustomIpClient);
var cmdh: TCmdHeader;
   Data: PChar;
begin
 Application.ProcessMessages;
 ClientSocket.ReceiveBuf(cmdh, SizeOf(cmdh));
 GetMem(Data, cmdh.BufferSize);
 ClientSocket.ReceiveBuf(Data, cmdh.BufferSize);

 case cmdh.Cmd of
   1: Memo1.Lines.Add(Data);
   2: Caption := PChar(Data);
 end;
end;

Почему, данные то проходят, то не проходят??? Очень грустен... Чувствую, что ответ прост, но уже убил часа 4... :(


 
TButton ©   (2004-04-09 23:48) [1]

1. грамотно
2. не знаю =)


 
Verg ©   (2004-04-10 10:52) [2]

Как бы еще догадаться в каком режиме используется Clt.

cmdh.Data := Data;

У TCmdHeader нет поля Data. Этот код в принципе даже скомпилироваться не может.

Переменные типа pchar - по смыслу это просто указатель на область памяти. Отличается только разрешенными на этом типе указателей арифметическими операциями друг с другом и с целочисленными типами, индексированием и автоматическим переписыванием той области памяти, на которую они указывают в string с автоматическим определением размера по признаку "до первого #0"
var
 A : pchar;
 S : string;
 L : cardinal;
....
 Так вот.
 S := A;
автоматически заменяется компилятором на по смыслу подобное
L := StrLen(A);
SetLength(S, L);
move(A^, S[1], L);

Вот теперь подумай - что ты там пытаешься передать и зачем?


 
Gott   (2004-04-10 23:27) [3]

Проще всего пересылать данные как текст и использовать для обмена данными ТОЛЬКО события OnXXXXRead & OnXXXXWrite. Для отправки использовать SendText.


 
TButton ©   (2004-04-10 23:31) [4]

3
согласен. но не всегда.



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1084720838
DIS
2004-05-16 19:20
2004.05.30
путь к файлу.


3-1083836197
Pul
2004-05-06 13:36
2004.05.30
DBGrid и редактирование lookup полей


1-1084735371
Chlavik
2004-05-16 23:22
2004.05.30
TGraphicControl и его отрисовка за пределами его :)


3-1083607544
pashaz
2004-05-03 22:05
2004.05.30
DBLookUpComboBox


6-1080573425
kortun
2004-03-29 19:17
2004.05.30
TcpServer принципы работы?