![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобратся с 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]По какому критерию ты собираешься определять, нужное оно тебе (соединение) или ненужное ?