Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > ServerSocketClientRead


Автор: Ak47black 16.4.2007, 13:17
Помогите ктонибудь разобраться, мне нужна очень точная передача данных потому-что я использую шифрование.
Вообшем попробую описать проблему
Если я делаю
Код

procedure TMainControlForm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Text: String;
begin
  Text:= Socket.ReceiveText;

то все у меня нормально работает, но мне нужно принимать не только текстовые(шифрование по Base64) послания, но и иногда бинарные, так что я пытаюсь сделать это
Код

procedure TMainControlForm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Text: String;
  Buffer: Pointer;
  BufferLength: Integer;
begin
  BufferLength:= Socket.ReceiveLength+1;
  GetMem(Buffer,BufferLength);
  Socket.ReceiveBuf(Buffer^,BufferLength);
  Text:= Pchar(Buffer);

Но текст при получении полного буфера получаеться неидентичен тому которые получаеться в первом коде.
Тупо что текст и буфер после сшитывания сразу обнуляется  smile , поэтому я изобрел 2 код, но как его исправить что-бы Text получался идентичен как и в первом коде ?

Автор: Snowy 16.4.2007, 13:37
Конечно. Pchar порежет на первом же нуле.
Тогда уж так:
Код

var
  Text: String;
  BufferLength: Integer;
begin
  BufferLength:= Socket.ReceiveLength;
  SetLength(Text, BufferLength);
  Socket.ReceiveBuf(pointer(Text), BufferLength);

Автор: Ak47black 16.4.2007, 13:46
Snowy, можно было-бы сделать и так ,но тут сам прикол в том что если один раз обрашаешься, то обнуляеться.
Тоесть я хочю получить и Buffer и строку.
Тут по любому сначала нужно буфер сшитать куданибудь а потом из буфера строку сделать.
Только как правильно из Buffer строку сделать.

Автор: Ak47black 16.4.2007, 14:02
Выкрутилься так 
Код

  BufferLength:= Socket.ReceiveLength;
  GetMem(Buffer,BufferLength);
  Socket.ReceiveBuf(Buffer^,BufferLength);
  SetLength(Text,BufferLength);
  CopyMemory(Pchar(Text),Buffer,BufferLength);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)