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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Socket.ReceiveText + Delphi2009 = иероглифы 
:(
    Опции темы
dbgrid
  Дата 4.2.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.10.2008

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



Здравствуйте...
использую ServerSocket и ClientSocket, при пересылке сообщения от клиента к серверу (или наоборот), приходят иероглифы...как получить из этого текст??

код для клиента
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
   ClientSocket1.Socket.SendText('hello world');
end;


код для сервера
Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
 Caption:=Socket.ReceiveText;
end;


в результате получем
ИЕРОГЛИФЫ (скриншот не получилось вставить)))

p.s. кстати забыл сказать...судя по тому что пишут в интернете, такой глюк только в delphi 2009  

Это сообщение отредактировал(а) dbgrid - 4.2.2010, 17:11

Присоединённый файл ( Кол-во скачиваний: 37 )
Присоединённый файл  ______.JPG 10,34 Kb
PM MAIL   Вверх
Alca
Дата 4.2.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 1
Всего: 50



Ты подсоединился к китайской матрице!  smile 



--------------------
PM WWW ICQ Skype Jabber   Вверх
kami
Дата 4.2.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 72



Цитата(dbgrid @  4.2.2010,  17:08 Найти цитируемый пост)
приходят иероглифы...как получить из этого текст??

Я не ставил себе D2009.
Если не сложно - приаттачьте сюда ScktComp.pas (или в каком там модуле находятся в D2009 TClient и ServerSocket), почти уверен в чем проблема, но нужно достоверно убедиться.
PM MAIL WWW   Вверх
dbgrid
Дата 5.2.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.10.2008

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



вот
пришлось расширение поменять))

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  ScktComp.txt 61,67 Kb
PM MAIL   Вверх
kami
Дата 5.2.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 72



Вот она проблема и вырисовалась.
В D2009 тип string по умолчанию=WideString(или UnicodeString, не суть сейчас важно).
Смотрим на объявления функций в TCustomWinSocket&:
Код

function SendText(const S: [U]AnsiString[/U]): Integer;
function ReceiveText: string;

Итого - передаем как AnsiString, а принимаем тот же буфер как WideString. Неувязка smile
Одно из решений - использовать вместо SendText -> SendBuf
Код

if Length(MyStr)<>0 then
  ClientSocket1.Socket.SendBuf(myStr[1], Length(myStr)*SizeOf(Char));


Это сообщение отредактировал(а) kami - 5.2.2010, 18:29
PM MAIL WWW   Вверх
Fess59
  Дата 9.2.2010, 13:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.2.2010

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



Была аналогичная проблема, решил вот так:

Код

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var s: AnsiString;
begin
    SetLength(s, Socket.ReceiveLength);
    SetLength(s, Socket.ReceiveBuf(Pointer(s)^, Length(s)));
    Memo1.Lines.Add (String(s));
    Memo1.Lines.Add('Получение данных');
end;



PM MAIL ICQ   Вверх
Artes
Дата 11.2.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.8.2008

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



Цитата(Fess59 @ 9.2.2010,  13:16)
Была аналогичная проблема, решил вот так:

Код

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var s: AnsiString;
begin
    SetLength(s, Socket.ReceiveLength);
    SetLength(s, Socket.ReceiveBuf(Pointer(s)^, Length(s)));
    Memo1.Lines.Add (String(s));
    Memo1.Lines.Add('Получение данных');
end;

Спасибо! Очень помог. Можеш обьяснить вчем тут фишка?

Еще вопрос. Пробывал пересылать буфер типа 
Код

var
  S: ansistring;
  buf : TBytes; {array of byte}
....
begin
.....
     s:='tratata';
     buf:= ByteOf(S);
     L:=Length(buf);
.... ClientSocket.Socket.SendBuf (buf, L); 


на сервер приходит пустой буфер. Таже Delphi 2009. 
Подскажите в чем проблема.

PM MAIL   Вверх
Zemlyanov
Дата 22.2.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.2.2010

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



Блин , поставил Delphi 2009 не могу найти ServerSocket и ClientSocket, до этого стоял Delphi 2006. В чем проблема?
PM MAIL   Вверх
Zemlyanov
Дата 22.2.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.2.2010

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



Все разобрался.Надо было добавить компонент ,войди в меню Component выбери пункт Install Packages дальше Add, зайти в папку Bin и выбрать  файл dclsockets120.bpl 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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