Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отправка сообщения udp 
V
    Опции темы
MAKCim
Дата 1.6.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  31.5.2008,  23:51 Найти цитируемый пост)
смотри а если я буду биндить клиенты на 127.0.0.2 127.0.0.3 итд и отправлять бродкаст на 127.0.0.255 они его получат? 

хотя да, должно работать
только не 127.0.0.255, а 127.255.255.255


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 1.6.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



во и я так же подумал, но почему то ничего не принимаеться может это особенности того что у меня линукс на виртуальной машине стоит и там сеть не настроена(хотя поидее на адреса 127.х.х.х это не влияет)
вот начало кода сервера, он биндится на 11000 порт а шлет бродкаст на 4004
Код

int main(int argc, char** argv)
{
    struct sockaddr_in cl_addr, first_addr, srv_addr;
    char msg[BUF1];
    int yes = 1, work_sock, first, corn_num = 0;

    struct timeval t;
    t.tv_sec = 2;
    t.tv_usec = 0;
    
    fd_set fd;

        if(argc == 1)
    {
        cout << "error: wrong data entered!"<<endl;
        return 0;
    }

    work_sock = socket(AF_INET, SOCK_DGRAM, 0);

    bzero(&srv_addr, sizeof(srv_addr));
    srv_addr.sin_family = AF_INET;
    srv_addr.sin_addr.s_addr = htons(INADDR_ANY);
    srv_addr.sin_port = htons(11000);

    bzero(&broad_addr, sizeof(broad_addr));
    broad_addr.sin_family = AF_INET;
    broad_addr.sin_port = htons(4004);

    if(inet_aton(argv[1], &broad_addr.sin_addr) == 0) {
        cout<<"wrong data "<<strerror(errno)<<endl;
        close(work_sock);
        exit(-1);
    }

    if(bind(work_sock ,(sockaddr *)&srv_addr, sizeof(srv_addr)) < 0) {
        cout<<"bind error "<<strerror(errno)<<endl;
        close(work_sock);
        return 0;
    }
    if(setsockopt(work_sock, SOL_SOCKET, SO_BROADCAST,(char *) &yes,  sizeof(yes)) < 0)
    {
        cout<<"set sock opt error "<<strerror(errno)<<endl;
        close(work_sock);
        exit(-1);
    }
    fcntl(work_sock, F_SETFL, O_NONBLOCK);
    while(1)
    {
        cout<<endl<<endl<<"start"<<endl;
        corn_num++;
        first = 1;
        client_addr.clear();

        FD_ZERO(&fd);
        FD_SET(work_sock, &fd);
        
        t.tv_sec = 2;
        t.tv_usec = 0;

        bzero(msg, BUF1);
        sprintf(msg, "%d", corn_num);

        if(sendto(work_sock, msg, strlen(msg), 0, (sockaddr *)&broad_addr, sizeof(broad_addr)) < 0)
        {
            cout<<"sendto error  "<<strerror(errno)<<endl;
            close(work_sock);
            exit(-1);
        }

        cout<<"sended broadcast mes"<<t.tv_sec<<endl; 



клиент биндится на 4004 порт и опишник, тот который указывается на входе, и ждет сообщения. Вот начало 
Код

int main(int argc, char** argv)
{
    int work_sock, corns_left = NUM1, yes = 1, miss = 0;
    struct sockaddr_in  my_addr,  srv_addr;
    char msg[BUF1];
    char chk[BUF1] = "first\0";
    fd_set fd;
    struct timeval t;
    t.tv_sec = 5;
    t.tv_usec = 0;
    
        if(argc == 1)
    {
        cout << "error: wrong data entered!"<<endl;
        return 0;
    }
    
    work_sock = socket(AF_INET, SOCK_DGRAM, 0);

    bzero(&my_addr, sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(4004);
    
    if(inet_aton(argv[1], &my_addr.sin_addr) == 0) {
        cout<<"wrong data"<<endl;
        close(work_sock);
        exit(-1);
    }
    if(bind(work_sock ,(sockaddr *)&my_addr, sizeof(my_addr)) < 0)
    {
        cout<<"bind error "<<strerror(errno)<<endl;
        close(work_sock);
        return 0;
    }
    if(setsockopt(work_sock, SOL_SOCKET, SO_BROADCAST,(char *) &yes,  sizeof(yes)) < 0)
    {
        cout<<"set sock opt error "<<strerror(errno)<<endl;
        close(work_sock);
        exit(-1);
    }
    while(1)
    {
        FD_ZERO(&fd);
        FD_SET(work_sock, &fd);

        bzero(msg, BUF1);
        socklen_t sz = sizeof(srv_addr);
        bzero(&srv_addr, sizeof(srv_addr));
        cout<<"receiving..."<<endl;
        if(recvfrom(work_sock, msg, BUF1, 0,(struct sockaddr *) &srv_addr, &sz) < 0)
        {
            cout<<"recieve error"<<strerror(errno)<<endl;
            close(work_sock);
            exit(-1);
        }
        cout<<"read, corn num is  "<<msg<<"  corns left  "<<corns_left<<endl; 


Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 1.6.2008, 14:16
--------------------
PM MAIL   Вверх
MAKCim
Дата 2.6.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



4eJIoBekMoJIekyJIa, 
посмотри через 
Код

# ifconfig lo

есть ли поддержка широковещательной передачи на интерфейсе


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 2.6.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



походу нет, тока адрес написан и маска. А как сделать поддержку?
--------------------
PM MAIL   Вверх
MAKCim
Дата 2.6.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  2.6.2008,  12:42 Найти цитируемый пост)
походу нет, тока адрес написан и маска. А как сделать поддержку? 

с ходу не скажу


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 2.6.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



лан уже не срочно впринцыпе

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 2.6.2008, 15:03
--------------------
PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 2.6.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



Все MAKCim, спасибо большое, разобрался.
Считаю, что тему можно закрыть.
--------------------
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.