Отправка пакета в сети по определенному адресу

Тема в разделе "WASM.BEGINNERS", создана пользователем probka, 19 мар 2008.

  1. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Подскажите, пожалуйста, в Borland C++ Builder 6.0 существует возможность отправки пакета по определенному адресу (IP) в сети? В составе свойств какого-либо компонента. Или эту функцию нужно вручную прописывать?
    Желательно, чтоб это было в свойствах Servera. Чтоб он отрпавлял пакет не сразу всем, а только какому-то конкретному адресату.

    У меня уже такая мысля появилась, отправлять сразу всем, а в клиентах сделать фильтр, который примет и запишет файл на диск, на локальном компе, только если перед пакетом стоит IP этого компа.

    Спасибо.
     
  2. SUMASBROD

    SUMASBROD Member

    Публикаций:
    0
    Регистрация:
    8 май 2007
    Сообщения:
    64
    TServerSocket, TClientSocket?
     
  3. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Где у них возможность отправки по определенному адресу? Есть стандартный метод? Или вручную делать?
    TServerSocket - отправляет сразу всем. Так?
    TClientSocket - настроен на IP определенного сервера. Так?
     
  4. SUMASBROD

    SUMASBROD Member

    Публикаций:
    0
    Регистрация:
    8 май 2007
    Сообщения:
    64
    TClientSocket`ом цепляешься к серверу
    а TServerSocket сам всем ниче не посылает, если всем то ты должен сделать типа такого что нибудь

    Код (Text):
    1. for (int i=0; i<ServerSocket->Socket->ActiveConnections; i++)  {
    2.     ServerSocket->Socket->Connections[i]->SendText(Buf);
    3. }
    ну и события соответствующие обрабатывать
    Можно поглядеть для примера исходники чата какого нибудь.
     
  5. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    SUMASBROD, мне наоборот нужно конкретному адресату. Клиент отправляет клиенту через сервер. Сервер принимает от отправителя, регестрирует, и посылает адресату.

    По примеру, в исходнике, все соединения, на сервере, хранятся в "ServerSocket->Socket->Connections"? Так? Извини, как прочитать все соединения и послать выборочно?
     
  6. SUMASBROD

    SUMASBROD Member

    Публикаций:
    0
    Регистрация:
    8 май 2007
    Сообщения:
    64
    Ну в принципе можно так:

    Код (Text):
    1. AnsiString DestIP = "dest IP";
    2. for (int i=0; S->Socket->ActiveConnections; i++ ) {
    3.     if (S->Socket->Connections[i]->LocalAddress == DestIP) {
    4.         ServerSocket->Socket->Connections[i]->SendText(Buf);
    5.     }
    6. }
    Или так
    Код (Text):
    1. char *DestIP = "dest IP";
    2. for (int i=0; S->Socket->ActiveConnections; i++ ) {
    3.     if (!strcmp(inet_ntoa(S->Socket->Connections[i]->Addr.sin_addr),DestIP))
    4.         ServerSocket->Socket->Connections[i]->SendText(Buf);
    5.     }
    6. }
    Кстати, в справке Билдера есть нормальное описание этих компонентов, можно еще про Winsock почитать, так что RTFM :)
     
  7. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Уточняю что понял:

    Код 1.

    Присвоили переменной требуемый нам адрес. AnsiString DestIP = "dest IP";
    Проверяем все соединения на наличие требуемого адреса. for(int i=0; S->Socket->ActiveConnections; i++)
    Если требуемый адрес на связи, if(S->Socket->Connections->LocalAddress == DestIP)
    Отправить текстовый пакет. ServerSocket->Socket->Connections->SendText(Buf);

    Уточнение:
    1. Текстовый пакет отправится только по требуемому нам адресу? По другим адресам не отправится?
    2. Это кодировка серверной части?
    3. Как со стороны клиента, дать понять серверу, по какому адресу перенаправить пакет? Перед отправкой пакета, со стороны клиента, нужно вначале отправить требуемый нам адресс? Вот так:

    Код (Text):
    1. Form1->Client->Socket->SendText("191.154.10.17");
    а потом уже отправлять сам пакет?

    Сервер принимает сначала адрес, вставляет его в DestIP, потом принимает файл и перенаправляет его. Так?

    Код 2.

    Строки 1 - 2 без изменений.
    Если в соединениях сервера присутствует активное соединение с требемым нам IP,
    Строка 4 без изменения.

    Я все правильно понял?
     
  8. SUMASBROD

    SUMASBROD Member

    Публикаций:
    0
    Регистрация:
    8 май 2007
    Сообщения:
    64
    Ну в принципе да, только лучше наверное придумать какой нибудь протокол для передачи информации
    типа

    1 первоначально на сервер - "destination <IP>"
    2 ответ с сервера - "ОК"
    3 информация о сообщении, типа файл, текст, или еще чего - "content:file, name:<имя>"
    4 ответ с сервера - "ОК"
    5 ну и до конца файла или сообщения посылаешь его
    6 в конце долепить что то типа идентификации о конце передачи и контрольную сумму
    7 ответ с сервера об удачной или нет передаче или сообщения файла

    Навороить можно что угодно, на что фантазии хватит =)
     
  9. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    SUMASBROD, ты мне очень помог. Спасибо огромное.
     
  10. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Посмотрите, пожалуйста, пытаюсь соорудить что-то на типа протокола:

    Сервер:
    Код (Text):
    1. Form1->Client->Socket->SendText("50.15.100.107");
    Клиент:
    Сервер:
    Теперь мне нужно принятый клиентом IP направить в переменную, а потом с сервера, опять направить поток, но на этот раз уже файл.
    И не получается. Не понимаю как разделить два потока.
    Как первую принятую строку направить в переменную, а второй поток в файл?
     
  11. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Ну никто незнает, что ли? ;(((
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    советую почитать какю-нибудь книжку по ООП языку. Причем фундаментальную.
    А то большая часть высказываний - бред.
     
  13. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    n0name, какую книжку? Бред, бред - только и слышу. Может это у тебя бред? Ни хочешь помочь, так не гадь. И проичем сдесь ООП? Я его что незнаю? Я не понимаю устройство сетевой передачи. По протоколам и без.

    Книгу какую?
     
  14. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Точно сетевой передачи? ;)
     
  15. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    censored, а какой? Я ни шиша ни врублюсь в эту парашу виндовую. Била гейтса повесить надо, сволочь, на заборе
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    probka
    на сайте есть спецификация WinSock
    тебе здесь ни кто не гадил :dntknw:
    погугли
     
  17. FireFox

    FireFox New Member

    Публикаций:
    0
    Регистрация:
    9 май 2008
    Сообщения:
    19
    У Касперского есть небольшая книжица. "Самоучитель игры на WinSock" называется.