Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ServerSocketClientRead, TServerSocket 
V
    Опции темы
Ak47black
  Дата 16.4.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



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

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 получался идентичен как и в первом коде ?
PM MAIL   Вверх
Snowy
Дата 16.4.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Конечно. Pchar порежет на первом же нуле.
Тогда уж так:
Код

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

PM MAIL   Вверх
Ak47black
Дата 16.4.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



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

Это сообщение отредактировал(а) Ak47black - 16.4.2007, 13:52
PM MAIL   Вверх
Ak47black
Дата 16.4.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Выкрутилься так 
Код

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.3494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.