![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача файла!
serko © (2006-07-27 00:25:00)Здрасте!
Вообщем есть у меня код для передачи файла на другой комп с помощью ServerSocket и ClientSocket. Работает все и ок если бы не одно но!
у меня в сети 10 компов, которые могут включаться в любом порядке. И возникает необходимость передавать этот файт то 1 компу, то группе компов то вообще всем!
Вопрос: как я могу знать каким по счету он подключится к ServerSocket?
Ну вот отправил я всем запрос на прием файла, отозвался один или группа т.е. я могу узнать его Имя или еще че нить. Но как узнать кому его отправлять я не могу понять как это сделать!
Ведь отправляю я так:
Form1.ServerSocket1.Socket.Connections[0].SendStream(fs);
Вот это файл уйдет только 1-му.
Ну я надеюсь вы меня поняли че мне надо и поможете мне!
Сергей М. (2006-08-03 16:21:00) [1]
> serko © (27.07.06 22:41) [2]
> ну т.е. второй он или пятый
Сейчас он, клиент, в этом списке, предположим, 4-й, а через долю секунды он, тот же самый активный клиент, запросто может стать третьим .. и даже первым..
И как ты на это будешь реагировать, при твоей логике, ориентированной на "номер подключения" ?
Юра (2006-08-03 16:15:00) [2]Есть свойство Connections. Дальше можно хоть так:
1. При соединении на сервере в событии ServerSocket1ClientConnect запоминаешь Handle сокета... например, в лист.
2. При событии ServerSocket1ClientRead смотришь, какой номер у тебя в листе Handle сокета, из которого ты читаешь.
Таким образом, ты знаешь, с кем именно ты общаешься. Это очень грубо, но работает. Можно заставить клиентов запрашивать файлы, написав свой протокол поверх TCP/IP,можно вытаскивать их ip из соединения и так идентифицировать. Можно еще что-нибудь придумать :)
Количество одновременно подключенных клиентов хранится в ServerSocket1.Socket.ActiveConnections.
Можно сделать что-то вроде:
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
begin
здесь смотрим, если клиенту, связанному с этим сокетом, надо посылать, то
ServerSocket1.Socket.Connections[i].SendStream(MyStream);
end;
serko (2006-07-28 21:48:00) [3]Ну ну! не надо игнорировать!
serko (2006-07-27 22:41:00) [4]Ну это я понимаю!
Хорошо спрошу так! Если какое то свойство в котором хранится номер подключения клиента? ну т.е. второй он или пятый либо вообще не подключен!
Сергей М. (2006-07-27 09:50:00) [5]
> это файл уйдет только 1-му.
>
А для Connections[1] - второму, для Connections[2] - третьему и т.д.
> как узнать кому его отправлять
Кто запросил, тому и отправляй.