Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

TServerSocket and TClientSocket   Найти похожие ветки 

 
paradox01   (2007-03-12 07:55) [0]

Имеется программа сервер (TServerSocket), к нему через сокеты подключаются клиентские (TClientSocket) приложения. Клиенты при подключении отправляют «UserName». Вопрос: куда удобнее записывать данные о пользователях (Имя, IP адрес)? Чтобы потом отправить файл конкретному клиенту или всем клиентам сразу.


 
Сергей М. ©   (2007-03-12 08:46) [1]


> куда удобнее


Что значит "удобнее" ?


 
paradox01   (2007-03-12 09:31) [2]

Если я не ошибаюсь данные о клиентах можно хранить в массивах с привязкой к handle сокета или использовать свойство - Data. Меня интересует, как это эффективнее реализовать? Если можно в примерах покажите.


 
Сергей М. ©   (2007-03-12 09:53) [3]

type
TClientInfo = ^TClientInfo;
TClientInfo = packed record
   UserName: String;
   ...
end;


В обработчике OnClientConnect:

var
 ClientInfo: PClientInfo;
..
New(ClientInfo);
Socket.Data := ClientInfo;


В обработчике OnClientDisconnect:

var
 ClientInfo: PClientInfo;
..
Dispose(ClientInfo);


В событии OnClientRead:

PClientInfo(Socket.Data).UserName := переданная клиентом строка, содержащая имя пользователя;

IP-адрес активного клиента хранить не нужно - его адрес всегда (в любом из событий OnClientConnect/Read/Write/Disconnect/Error) доступен в св-ве Socket.RemoteAddress


 
paradox01   (2007-03-12 12:53) [4]


> В обработчике OnClientDisconnect:
> var  ClientInfo: PClientInfo;
> ..
> Dispose(ClientInfo);


Здесь по конкретнее можно? Может так:
Dispose(Socket.Data);


 
Сергей М. ©   (2007-03-12 13:06) [5]


> paradox01   (12.03.07 12:53) [4]
>
>


А ты попробуй)


 
paradox01   (2007-03-12 13:56) [6]

Я уже попробовал ошибку не выдает, но я не уверен, освободился ли на самом деле память выделенный New(ClientInfo).

Как освободить выделенную память?


 
Сергей М. ©   (2007-03-12 14:42) [7]


> я не уверен, освободился ли на самом деле память


Почему ?


 
Empleado ©   (2007-03-12 17:43) [8]


> paradox01   (12.03.07 12:53) [4]
>
> Здесь по конкретнее можно? Может так:
> Dispose(Socket.Data);

>Сергей М. ©   (12.03.07 14:42) [7]
Чисто технический вопрос:

Если уж так как указано "> Dispose(Socket.Data)", то так будет правильнее - Dispose(PClientInfo(Socket.Data)), чем просто Dispose(Socket.Data)?
Или однофигственно?...

Ведь должен же Dispose знать ЧТО он освобождает и что там находится (long strings, arrays, s.o.), чтобы их финализировать.


 
Сергей М. ©   (2007-03-13 08:11) [9]


> Empleado ©   (12.03.07 17:43) [8]


Да, ты прав. Приведение типов я упустил.


 
Сергей М. ©   (2007-03-13 08:58) [10]


> Empleado ©   (12.03.07 17:43) [8]


Стоп.


> Если уж так как указано "> Dispose(Socket.Data)",


Где это указано ?

В приведенном мной коде такого нет ..


 
Empleado ©   (2007-03-13 11:05) [11]

>Сергей М. ©   (13.03.07 08:58) [10]
Не в твоем примере.

В [4] paradox01 (12.03.07 12:53) предложил избавляться от созданных данных таким образом:

> Здесь по конкретнее можно? Может так:
> Dispose(Socket.Data);

Это было к этому.

Всего доброго.


 
SlymRO ©   (2007-03-13 13:17) [12]

ServerType какой?
если stThreadBlocking то лучше чем
 TSCThread=class(TServerClientThread)
 private
//Хранить тут данные о пользователях
 protected
   procedure ClientExecute; override;
 end;

не придумали...
или непосредственно в переменных в теле ClientExecute;


 
paradox01   (2007-03-14 08:19) [13]

Всем спасибо помогли!


 
alexkdpu   (2007-04-01 13:58) [14]

как законектится, передать запрос типа "GET / HTTP1.1" и т.д. и полученый ответ сервера записать в переменную s с помощью компонента TClientSocket. Пример если можно, спс


 
alexkdpu   (2007-04-01 14:01) [15]

как законектится, передать запрос типа "GET / HTTP1.1" и т.д. и полученый ответ сервера записать в переменную s с помощью компонента TClientSocket. Пример если можно, спс



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
2-1194456145
NaRuTo
2007-11-07 20:22
2007.12.02
Как сделать так чтобы числа не повторялись.


15-1194180366
atruhin
2007-11-04 15:46
2007.12.02
Флейм. Отношение к Open Source компонентам.


15-1194236411
Bess
2007-11-05 07:20
2007.12.02
ICO вместо BMP


6-1175247082
Wolchonok29
2007-03-30 13:31
2007.12.02
Передача потока


3-1184680236
BlackCat
2007-07-17 17:50
2007.12.02
Помогите разобраться с запросом или кодом... голову сломал...