Главная страница
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.024 c
4-1082040213
Дубинин Алексей
2004-04-15 18:43
2004.05.30
Определение количества оперативной памяти работающего приложения


6-1081753570
Darkman
2004-04-12 11:06
2004.05.30
Как создать VPN соединение


3-1083660291
han-bratan
2004-05-04 12:44
2004.05.30
тип данных Мемо


1-1084300691
Goida
2004-05-11 22:38
2004.05.30
Снова MDI из DLL: опять проблема...


1-1084467098
Kreon
2004-05-13 20:51
2004.05.30
OnMouseWheelDown,Up