Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
2-1194459961
OP
2007-11-07 21:26
2007.12.02
Как присвоить событие, только что созданному объекту?


6-1175071587
inex
2007-03-28 12:46
2007.12.02
определение имени хоста по его адресу


3-1184772562
olevacho_
2007-07-18 19:29
2007.12.02
защта базы.


15-1193987752
Still Swamp
2007-11-02 10:15
2007.12.02
Где добыть интерпритатор матвыражений?


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский