Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизКак граматно отправлять и принимать данные через сокеты? Найти похожие ветки
← →
@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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c