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

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

Помогите разобратся с ServerSocket.......ActiveConnections...... [D4, D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]


black_angel_S ©   (2002-04-29 06:45:00) 

Ребята помогите разобратся.......
Вобщем пишу маленький прокси на стандартных компонентах Client и Server Socket..
Вопрос как обратится к какому нибудь соединению в server socket я пробовал CONNECTIONS[] работает но как мне оторвать нужное и как узнать какое допустим что их много они меняются activeconnections тут не большой помошник .....
Если можно пример исходник.....


Fredericco   (2002-04-30 13:27:00) [1]

black_angel_S © А потом пишешь:

for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
if ServerSocket1.Socket.Connections[i].SocketHandle=Handle then
ServerSocket1.Socket.Connections[i].SendText(Text);


Fredericco   (2002-04-30 13:23:00) [2]

2cyborg © Согласен, код интересный. Но не проще ли через Socket.SocketHandle? Даже если на одной машине установить несколько серверов, то у каждого нового соединения на любом сервере будет уникальный Socket.SocketHandleна данной машине.


cyborg   (2002-04-29 21:31:00) [3]

Как уже тут говорили, у socket есть поинтер data, вот на этот поинтер можно повесить любые данные, например хоть:

PData = ^ZData;
Zdata = record
IP : String[15];
Name : String[20];
{-- и прочая мукулатура, что душе угодно --}
end;

procedure TMainForm.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
Var
_Data : PData;
begin
GetMem(_Data,SizeOf(ZData));
Socket.Data:=_Data;
_Data.IP:=Socket.RemoteAddress; {Сохраняем IP}
_Data.Name:=""; {Просто инициализируем, что бы глюков не было, пока не знаем, но потом узнаем и запишем}
End;

procedure TMainForm.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
FreeMem(Socket.Data,SizeOf(ZData));
{Освободить занимаемую память, тут говорили, что Дельфи сама это дело освобождает, но я нигде в справке это не нашёл, так что лучше это сделать самому}
End;

procedure TMainForm.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
_Data : PData;
begin
{----тут код молучения мессаги-----}
{---если пришло имя, то записать---}
_Data:=Socket.Data; {Берём Data этого сокета}
_Data.Name:="Пришедшее имя";
End;


Возможны небольшие ошибки в ексте :-(
Если это помогло, то это кУрУтО :-)


Digitman   (2002-04-29 08:37:00) [4]

По какому критерию ты собираешься определять, нужное оно тебе (соединение) или ненужное ?


Наверх

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