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

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

Передача файла!


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] - третьему и т.д.


> как узнать кому его отправлять


Кто запросил, тому и отправляй.


Наверх

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