Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу Написание программы с передачей пакетов через UDP
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Kylie Kylie вне форума
Member
 
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.09.2006
Thumbs up Написание программы с передачей пакетов через UDP - 05.12.2006, 22:14

Приветствую всех.
Я тут писал прогу с передачей пакетов через UDP, я использовал NMUDP в C++ Builder, но умные люди порекомендовали перевести все на API и дали ссылку на простенький исходник. Но в нем происходит передача тилько коткретному серверу, а мне надо Multicast рассылку. Я пробовал поставить IP 255.255.255.255, но тогда вообще происходнит ошибка и клиент закрывается.
Ниже исходник клиента, подскажите что в нем надо исправить.
Код:
#include <stdio.h>
#include <winsock2.h>

#define PORT 666    // ???? ???????
#define sHELLO "Hello, %s [%s] Sailor\n"

int main(int argc, char* argv[])
{
        char buff[1024];

        printf("UDP DEMO echo-Server\n");

        // ??? 1 - ??????????? ??????????
        if (WSAStartup(0x202,(WSADATA *) &buff[0]))
        {
                printf("WSAStartup error: %d\n",WSAGetLastError());
                return -1;
        }

        // ??? 2 - ???????? ??????
        SOCKET my_sock;
        my_sock=socket(AF_INET,SOCK_DGRAM,0);
        if (my_sock==INVALID_SOCKET)
        {
                printf("Socket() error: %d\n",WSAGetLastError());
                WSACleanup();
                return -1;
        }

        // ??? 3 - ?????????? ?????? ? ????????? ???????
        sockaddr_in local_addr;
        local_addr.sin_family=AF_INET;
        local_addr.sin_addr.s_addr=INADDR_ANY;
        local_addr.sin_port=htons(PORT);

        if (bind(my_sock,(sockaddr *) &local_addr,sizeof(local_addr)))
        {
                printf("bind error: %d\n",WSAGetLastError());
                closesocket(my_sock);
                WSACleanup();
                return -1;
        }

        // ??? 4 ????????? ???????, ?????????? ?????????
        while(1)
        {
                sockaddr_in client_addr;
                int client_addr_size = sizeof(client_addr);
                int bsize=recvfrom(my_sock,&buff[0],sizeof(buff)-1,0,(sockaddr *)&client_addr,&client_addr_size);
                if (bsize==SOCKET_ERROR)
                        printf("recvfrom() error: %d\n",
                WSAGetLastError());

                // ?????????? IP-????? ??????? ? ?????? ????????
                HOSTENT *hst;
                hst=gethostbyaddr((char *)&client_addr.sin_addr,4,AF_INET);
                printf("+%s [%s:%d] new DATAGRAM!\n",(hst)?hst->h_name:"Unknown host",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));

                // ?????????? ???????????? ????
                buff[bsize]=0;

                // ????? ?? ?????
                printf("C=>S:%s\n",&buff[0]);

                // ??????? ?????????? ???????
                sendto(my_sock,&buff[0],bsize,0,(sockaddr *)&client_addr, sizeof(client_addr));
        }
        return 0;
}
Ответить с цитированием
  (#2 (permalink)) Старый
0xEEd 0xEEd вне форума
Member
 
Сообщений: 212
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.01.2006
По умолчанию 06.12.2006, 13:51

попробуй после создания сокета перед bind'ом поставить ему опцию:

Код:
BOOL bOpt = TRUE;
int err = setsockopt (my_sock, SOL_SOCKET, SO_BROADCAST, (CHAR *) &bOpt, sizeof ( BOOL ) );
Ответить с цитированием
  (#3 (permalink)) Старый
Kylie Kylie вне форума
Member
 
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.09.2006
По умолчанию 11.12.2006, 23:45

Цитата:
попробуй после создания сокета перед bind'ом поставить ему опцию:

<div class='codetop'>Код C++
<div class='codemain'>BOOL bOpt = TRUE;
int err = setsockopt (my_sock, SOL_SOCKET, SO_BROADCAST, (CHAR *) &bOpt, sizeof ( BOOL ) );[/code][/quote]

Цитата:
Спосибо, уже нашел в другом источнике этот же метод.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написание программы на С++ werovulv C++ Builder 2 17.05.2011 21:33
Написание программы в dephi salwator Delphi 5 29.12.2010 19:14
Написание программы. gvidofd Задания за деньги 1 21.05.2008 14:28
Написание программы без С++ классов xmatrix Delphi 3 06.08.2007 01:07
Написание программы для открытия CD-ROM через сеть swat-90 C++ Builder 2 24.05.2007 12:54
Написание программы для USB jaguarevg Visual C++ 4 17.05.2006 17:07
Написание программы TCP SYN запрос LaMiK Visual C++ 0 30.07.2005 03:16
Написание программы на два монитора DmitryVoevodin C++ Builder 1 28.10.2004 19:12
Написание программы будильник на С++ Anonymous Вопросы начинающих программистов 9 16.10.2004 16:05
Написание программы, которая работает с веб-камерами через VfW Vladimir the Red Sunny Visual C++ 1 22.01.2004 12:26
Написание программы для windows 98 на С++ Anonymous Visual C++ 11 26.09.2003 21:34
Написание программы на C++ *Юльчик* .NET 0 01.01.1970 04:00



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов