Пересылка файла по сети

Тема в разделе "Общие вопросы по С и С++", создана пользователем Korben, 3 ноя 2006.

  1. Korben

    Korben Гость

    Здравствуйте! Очень прошу помочь, так как неимоверно нуждаюсь в этой самой помощи. Есть исходник (прикреплен к сообщению) программы клиент-сервер, которая позволяет пересылать файл от сервера к клиенту. Реализована в одном файле, довольно-таки удобно. Но есть необходимость дополнить её следующим образом: чтобы подключаться мог не один клиент, а несколько, и чтобы сервер рассылал файл всем подключенным клиентам. Что именно нужно модернизировать и куда что дописать? Помогите пожалуйста! Я так понимаю, для того, чтобы в очереди было несколько клиентов, нужно использовать мультипоточность? Если у кого-то есть уже готовый пример, подскажите где его взять.

    Заранее огромное спасибо.
     

    Вложения:

  2. pushkin

    pushkin Гость

    Вот кусок кода из прикольного вируса, который я когда-то в детстве писал:

    Код (Text):
      int        from_len;   // Длина структуры данных подключенного клиента
    SOCKET   client_socket; // Сокет клиента
    sockaddr_in client_addr;  // Структура, хранящая адрес клиента

    // Бесконечный цикл получения соединений
    while (true)
    {
    // Принимаем соединения от клиентов
    from_len     = sizeof(client_addr);
    client_socket = accept(m_socket, (LPSOCKADDR)&client_addr, &from_len);

    // Проверяем ошибочность соединения
    if (client_socket == INVALID_SOCKET)
    {
    // Это может быть в случае, когда один из потоков клиента закрыл серверный сокет
    // Тогда эта функция возвращает ошибочный сокет и мы можем проверить, нужно ли остановить сервер
    if (m_bStopServer)
    {
    //          MessageBox(NULL, "Сервер остановлен", "*цензура*", MB_OK);
    return P_YES; // Остановка сервера
    }
    continue; // Если что опять переходим в режим ожидания соединения
    }

    // Создаем клиента передаем управление новому потоку
    CPushkinServClient *cl = new CPushkinServClient();
    cl->m_socket     = client_socket;
    cl->m_client_addr = client_addr;
    cl->server_p     = this;

    cout << "Client connected..." << endl;

    // Передаем управление новому потоку, который будет работать с этим клиентом
    DWORD thread_id;
    HANDLE hThread = CreateThread(NULL, 0, ChatWithClient, cl, 0, &thread_id);
    }

    return P_YES; // Нормальный выход
    Конечно же, этот пример у вас не скомпилируется, т. к. у вас нет определений всех моих классов (CPushkinServClient,...), но в нем отображена суть. Здесь не используются никакие компоненты для работы с сетью, а только "голые" сокеты.

    Суть в следующем: я тут открываю серверный сокет и ставлю его в режим ожидания соединений. Когда к нему коннектится новый клиент, я запоминаю всю информацию о нем в специальном класса (CPushkinServClient) и запускаю новый поток, передав ему объект этого класса в качестве параметра. Дальше диалог с клиентом идет в отдельном потоке до тех пор пока клиент и отключится. А основной поток в это время ожидает новые соединения.

    Внимание! Если очень нужно, я могу заняться этой сетевой передачей файлов вплотную и все сделать, но это только за деньги, естественно.
     
  3. Korben

    Korben Гость

    Для: pushkin
    Ну, за деньги, это за сколько?
    Большая часть-то готова (в моем примере), по сути нужно просто внедрить ее. у меня времени просто мало на это - постоянно на учебе, сейчас сессия уже скоро, некогда все заняться. сколько ты хочешь за такую работу?
     
  4. Uldman

    Uldman Гость

    У меня подобная проблеиа. Не подскажешь как решил? если решил. Заранее спасибо
     
  5. Korben

    Korben Гость

    О чорт... решил как-то да, но я уже и не помню, мужик... Я уже универ закончил как полтора года... :)
     
  6. Uldman

    Uldman Гость

    Огромная просьба, найди пожалуйста как решил эту проблему. Я уже много чего перепробовал, не получается.
     
  7. Uldman

    Uldman Гость

    Можешь прикрепить исходник? я посмотрю что я не так делал
     
  8. Yason

    Yason Гость

    :) :( :lol:
     
  9. Uldman

    Uldman Гость

    C отсылкой данных многим клиентам разобрался:) дело то было всего лишь в паре строк. Но тут сталкнулся с такой проблемой - мне нужно передать группу файлов. Кто знает как это реализовать?
     
  10. Setry

    Setry Гость

    а вам не кажется, что создание нового потока для каждого клиента это безумная трата ресурсов?
    зачем изобретать велосипед, когда можно воспользоваться асинхронными сокетами (почитайте в мсдн про WSADATA)
     
Загрузка...
Похожие Темы - Пересылка файла по
  1. Ustas83
    Ответов:
    0
    Просмотров:
    433
  2. k85
    Ответов:
    26
    Просмотров:
    2.439
  3. Fillya
    Ответов:
    4
    Просмотров:
    1.846
  4. k85
    Ответов:
    1
    Просмотров:
    1.315
  5. SergeyKirik
    Ответов:
    16
    Просмотров:
    5.131

Поделиться этой страницей