![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема при передаче списка TThreadList [D7, WinXP]
FrykT © (2005-06-07 05:36:00)Доброго времени суток!
попробую описать проблему. Пишу чат. Использую TTcpServer и TTcpClient. Имеем Usersтипа TThreadList.
в type обьявляю вот это:
WConnection = ^TConnection;
TConnection = record
host:string[20];
nick:string[30];
thread:pointer;
end;
В событии ОнКоннект сервера создаю обьект типа WConnection, ему присваиваю необходимые значения и добавляю в USERS. На клиенте решил хранить список юзеров, хост и Тхреад в таком же объекте типа TThreadList. Передача от сервера к клиенту происходит через буфер. Передается структура, чтото типа такого:
record=
nick:string[20];
text:shortstring;
AddUser:WConnection;
cmd:string[20];
end;
При добавлении отдельного юзера, переменная типа WConnection передается нормально, и обрабатывается тоже.
Возникла проблема со списком юзеров. Я пробывал передавать весь обьект TThreadList в структуре, но из этого у меня ничего не вышло. Как можно это сделать? Или посоветуйте что делать.
vers (2005-07-23 21:10:00) [1]
> FrykT (07.06.05 05:36)
Зачем передавать клиенту ссылку на объект в памяти сервера? Может надо последовательно передать поля этой записи?
А в случае со списоком пользователей - сначала передается количество записей, а потом последовательно все записи. Я тоже пишу чат :) и лучше этого способа пока не придумал.
tesseract (2005-07-23 20:30:00) [2]>>>Возникла проблема со списком юзеров. Я пробывал передавать весь обьект TThreadList в структуре, но из этого у меня ничего не вышло. Как можно это сделать? Или посоветуйте что делать.
Честно говоря могут и забанить и будут правы:
ЧИТАЙ УЧЕБНУЮ ЛИТЕРАТУРУ!!!!
WConnection = ^TConnection; - это по твоему объект? больше напоминает ссылку на запись.
>>> Я пробывал передавать весь обьект TThreadList в структуре
TThreadList массив указателей с собственной малопонятной структурой!!!! Указатели в DElphi тема для отдельного мата - ты передаёшь либо ничего либо фигню какую-либо.
передача WConnect может происходить и нормально (но не везде и не всегда)
Slym (2005-07-22 08:35:00) [3]Все он ловит это ты не ловишь...
Где и как ты обрабатываешь запросы в сервере
Orion_Net (2005-07-21 08:26:00) [4]Люди помогите с этими компонентами, я не пойму в чем дело...
когда подрубаешься к серваку TcpServer у него срабатывет событие TcpServerAccept и можно пулять собщения между клиентом и сервером типа через Sendln и Receiveln. А когда просто посылаешь строку через эти же команды. сервер их не ловит. Неужели каждый раз отрубаться и подрубаться. Мне такой вариант не подходит. а в исходниках в Delphi имеено так и сделали
Program Files\Borland\Delphi7\Demos\Internet\NetChat
они лежат в папке с делфой 7. Подскажите.... Зараннее очень благодарен!
atruhin (2005-06-07 07:55:00) [5]Придумай протокол передачи. Например первый байт определяет тип сообщения (Запись пользователя, список записей пользователя, сообщение от другого пользователя и т.д.), далее если идет передача списка пользователей, то второй байт (слово) передает кол-во пользователей в пакете, а после этого последовательно передаешь весь список. Список можещь хранить как угодно, в массиве, в списке и т.д., к протоколу передачи это отношения не имеет.
FrykT (2005-06-07 05:38:00) [6]Извиняюсь, использую TidTcpServer и TidTcpClient.