Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача типов через TClientsData [D6, Win2k, WinXP]


Страницы:   1 2 3

Calligraff ©   (2008-12-10 10:53:00) 

Добрый день.

Подскажите пожалуйста как можно реализовать следующее:

Есть тип:

type
 TClientsData = class(TObject)
   UIN: Integer;
   Password: String;
 end;

var
  Data: TClientsData;
begin
Data := TClientsData.Create;
Data.Login := 450355355;
Data.Password := '';

// TClientSocket
// Как отправить?

end;

Как отправить Data через TClientSocket, а на TServerSocket принять??

Зарание благодарен


Calligraff   (2008-12-16 13:42:00) [1]

понял. спасибо


Сергей М.   (2008-12-16 13:39:00) [2]

Вопросы по работе с СУБД задавай в соотв.конференции.


Calligraff   (2008-12-16 13:31:00) [3]

А не подскажешь, как массив TMSGARRAY = array[0..7168] of byte; записать в поле таблицы и каким типом должно быть поле?

БД MSSQL2000


Сергей М.   (2008-12-16 10:22:00) [4]


> это с компонентом


Но не на форме же)


Медвежонок Пятачок   (2008-12-16 10:19:00) [5]

не не не, это с компонентом
:)


Сергей М.   (2008-12-16 10:11:00) [6]

function MyQuery(inSQL: String): Boolean;
var
 Query: TQuery;
begin
 Query := TQuery.Create(nil);
 try
.....
 finally
   Query.Free;
 end;
end;


Медвежонок Пятачок   (2008-12-16 10:09:00) [7]

function MyQuery(inSQL: String): Boolean;
begin
Result := True;
end;


Calligraff   (2008-12-16 10:07:00) [8]

Сергей, а не подскажешь, как в функции, например


function MyQuery(inSQL: String): Boolean;
begin
..........
end;


выполнить запрос к SQL так, чтобы он не зависил от компонента TQuery находящегося на форме.
Т.е. выполнить запрос без компонента


Calligraff   (2008-12-16 10:04:00) [9]

ЗАРАААБООООТАЛОООО!!! :)


Сергей М.   (2008-12-12 13:05:00) [10]

Возьми за пример для изучения любойиз известных протоколов - ftp, http, smtp, pop3

В Тырнете подробных описаний этих протоколов (кто, кому, что, в каком формате, в какой последовательности и при каких условиях передает) - как грязи..


Calligraff   (2008-12-12 12:41:00) [11]

Где можно почитать о прикладных протоколах и как их писать?


Сергей М.   (2008-12-12 12:08:00) [12]


> не силен в протоколах


Речь идет о твоем собственном прикладномпротоколе информационного обмена !

А компоненты TServerSocket и TCkientSoket предназначены лишь для осуществления соединения и передачи данных любогосодержания между клиентами и сервером.

Префикс - это тоже данные.


Calligraff   (2008-12-12 12:01:00) [13]

Сергей, к сожаления я не силен в протоколах.

Я использую компоненты TServerSocket и TCkientSoket

Подскажи пожалуйста, где мне копать, чтобы разобраться с префиксом?


Сергей М.   (2008-12-12 11:26:00) [14]

Ввведи в спецификацию своего прикл.протокола префикс типа инф.пакета.
Любой передаваемый (неважно от кого кому) пакет предваряется передачей соотв.префикса.

Для не болоее чем 256-ти различных типов пакетов достаточно префикса размеров в 1 байт.


Медвежонок Пятачок   (2008-12-12 11:23:00) [15]

тогда получится клиент-программа не будет знать что за тип ей пришел

для этого люди придумали понятие "протокол"


Calligraff   (2008-12-12 11:02:00) [16]

согласен, но иногда сервер должен будет передавать данные без запроса например обновление информации у клинтов о текущем состоянии.

тогда получится клиент-программа не будет знать что за тип ей пришел

Как можно поступить здесь?


Сергей М.   (2008-12-12 10:59:00) [17]


> Каким образом можно узнать на клиентской машине, какой именно
> тип я передал?


Ну ты же сам сказал - в зависимости от запросов клиента.

Если клиент запросил конкретно RClientLoginInfo, то совершенно очевидно, что ожидает он ответ сервера в формате именно RClientLoginInfo и ни в каком ином.


Calligraff   (2008-12-12 10:52:00) [18]

Согласен в запросах исправлюсь. Тип Pointer - поучу :)

Тогда другой вопрос.

вот когда я передаю

formMain.ClientSocket1.Socket.SendBuf(Data,SizeOf(RClientLoginInfo));


то Data - Это у меня какой-то тип определенный, в данном случае Data: RClientLoginInfo; и на клиенте я получаю данные и все в порядке.

НО, допустим я хочу в передавать разные типы в зависимости от запросов клиента

наример есть два типа:
Data: RClientLoginInfo;
Data: RClientContactList;

Каким образом можно узнать на клиентской машине, какой именно тип я передал?

Зарание благодарен.


Сергей М.   (2008-12-11 16:06:00) [19]

В коде куча грубейшихошибок, демонстрирующих полное непонимание тобой предмета.

Data.DataPointer := Contacts; // здесь ты скопировал указатель на объект
Contacts.Free; // и тут же уничтожил этот объект, теперь скопированная ссылка смотрит в никуда (в поле Data.DataPointer отныне "мусор")

..

Contacts := TList.Create; // здесь ты создан новый объект и записал ссылку на него в перем-ю Contacts
Contacts := Data.DataPointer; // а здесь ты похерил эту ссылку, затерев ее "мусором" из Data.DataPointer, появившемся там при см.выше обстоятельствах

Ну и твоя работа с объектом Query в части хотя бы навигации по нему не выдерживает никакой критики.


Calligraff   (2008-12-11 15:03:00) [20]

День добрый

возникли еще вопросики :)

буду рад помощи.


procedure SendContactsList(Socket: TCustomWinSocket; Data: RUsrReceiveData);
var
  i: Integer;
  ToSocketID: Integer;
  Contact: TContactListID;
  Contacts: TList;
begin

 ....................

      Contacts := TList.Create;
      Contact := TContactListID.Create;
      for i := 1 to formMain.queryContactsList.RecordCount do begin
         formMain.queryContactsList.First;
         Contact.UIN := formMain.queryContactsList.FieldValues['uininlst_id'];
         Contact.Visiblity := formMain.queryContactsList.FieldValues['visiblity'];
         Contacts.Add(Contact);
         formMain.queryContactsList.Next;
      end;
      Contact.Free;
   end;
   formMain.queryContactsList.Close;
   Data.DataPointer := Contacts;
   Contacts.Free;

   // временная проверка
   Contacts := TList.Create;
   Contacts := Data.DataPointer;
   Contacts.Free;


Хотел проверить возможно ли обратно получить данные, но на строке Contacts := Data.DataPointer;ничего в Contacts от Data.DataPointer не присваивается, хотя в Data.DataPointer данные есть.

Подскажите как быть?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо