Форум: "Сети";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизИ снова сокеты Найти похожие ветки
← →
iWorm (2003-08-27 03:11) [0]Здравствуйте, вот сейчас пытаюсь:) написать свой собственный чат на основе сокетов, вообще то я его уже "написал", но по-принципу SendText и его ресив...
Я вот знаю, что это:= not умно, так как приходится писать кучу подпрограмм по выделению оттудова(из принятого текста) ника, его шрифта, самого сообщения и еще кучи всякой информации, но я не знаю как пересылать записи. Так вот если Вы еще не устали и не закрыли эту страницу, то позвольте я перейду к делу:)...
Значится у меня есть вот такая штучка:
type
TMyMessage = record
MesID: string[10];
FromName,
ToName: string[20];
ClientIp: string[15];
font: TFont;
BackColor: TColor;
Msg: string[250];
Params: string[100];
end;
......
var
message: TMyMessage;
......
И собственно напросившиеся вопросы:
1. Можно ли это все передать с клиента на сервер
2. Если нельзя, то, что поправить чтоб было можно сделать пункт 1
3. Как это все передать с клиента на сервер
еще желательно с кодами приема и передачи...
зарание спасибо,
с уважением Иван Семенов
← →
Demetrius2003 (2003-08-27 09:41) [1]Попробуй Socket.Sendtext(String(message));
А при получении message:=TMyMessage(Socket.ReceiveText);
Должно быть что-то в этом роде
← →
panov (2003-08-27 11:58) [2]>iWorm © (27.08.03 03:11)
Можно ли это все передать с клиента на сервер
Можно, преобразовав структуру вот к такому виду:
type
TMyMessage = packed record
MesID: string[10];
FromName,
ToName: string[20];
ClientIp: string[15];
{ font: TFont;} // а вот TFont не надо использовать
BackColor: TColor;
Msg: string[250];
Params: string[100];
end;
После этого передавай и принимай данные как буфер.
← →
Son!K (2003-08-27 15:14) [3]Хм а как прнять всё раскдать на сервере?
← →
panov (2003-08-27 18:34) [4]>Son!K © (27.08.03 15:14) [3]
Хм а как прнять всё раскдать на сервере?
Длина структуры в байтах известна.
Например, первый байт буфера - pBuf: PChar;
тогда
type PMyMessage = ^TMyMessage;
var
pRec: PMyMessage;
pBuf; PChar;
begin
... //принимаем данные
pRec := PMyMessage(pBuf);
//далее обращаемся к полям структуры как
pRec^.MesID
pRec^.FromName
и т.д.
← →
iWorm (2003-08-28 02:01) [5]2 panov © а что сделать с фонтом, его нада передать...
← →
Rouse_ (2003-08-28 02:25) [6]Объедини все это дело в одну строку а разделитель используй #0
Получится
Идентификатор#0Ник#0Еще_ник#0IP#0Font_Name#0Font_Syze#0Font_Style#0BkC olor#0....
Передается такая строка всеравно в виде буфера (собственно это и получается буфер т.е. динамический массив типа Byte или Char кому как нравится, не в названии дело) По приходе парсируй.
Желаю успехов
← →
iWorm (2003-08-28 03:24) [7]2 Rouse_ ©
Если я правильно понял - ты имеешь ввиду что я должен использовать кучу констант для font.name, font.style, чтобы это все объединить в одну строку; и это еще ладно а как с font.color или с BackColor поступить???
c уважением, Иван Семенов
← →
Son!K (2003-08-28 03:26) [8]> panov
Если не сложно скинь на мыло пирмерчк по подробней с отправкой и приёмом простенькой структуры и разбором её на сервере. Начинаю, ни чего не понял из выше сказаного :)
Буду очень благодарен.
← →
Rouse_ (2003-08-28 04:24) [9]> iWorm © (28.08.03 03:24) [7]
И их тудаже, а как ты думал? Структуру ты передашь только в виде буфера, Stream - тоже им передается. Я просто предлагаю вариант организации этого буфера.
Желаю успехов
← →
iWorm (2003-08-28 04:46) [10]2 Rouse_ © (28.08.03 04:24) [9]
да я понял, спасибо, но по большей части я хотел перейти именно от процедур выделения состовляющих, и от констант, потому как все оч. тяжело объявить...
2 panov © (27.08.03 18:34) [4]
Да мне тож, если не сложна, на мыло или тут напиши полный рабочий код отправки и приема... Я буду благодарен...
с уважением, Иван Семенов
← →
Polevi (2003-08-28 09:49) [11]type
TMyMessage = class(TPersistent)
...
...
published
MesID: string read .. write ..;
FromName: string read .. write ..;
ToName: string read .. write ..;
ClientIp: string read .. write ..;
font: TFont read .. write ..;
BackColor: TColor read .. write ..;
Msg: string read .. write ..;
Params: string read .. write ..;
end;
myMessage:=TMyMessage.Create(..)
..
..
ms:=TMemoryStream.Create;
ms.WriteComponent(myMessage);
ms -> socket
...................................................
socket->ms
myMessage:=ms.ReadComponent(nil);
← →
Polevi (2003-08-28 09:50) [12]PS
сорри, TMyMessage = class(TComponent)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c