UDP протокол - отправка/приём сообщений на/с широковещательных адресов

Автор: unDEFER Дата: 28.03.2004 03:04 Вот! Почему-то не хочет отправлять (да и принимать тоже) на широковещательные адреса:

connect: Network is unreachable

Что делать, чтоб было доступно?

---
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream.h>
#include <stdlib.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <netdb.h>

int main(int argc, char *argv[])
{
const char* const message = "MESSAGE";
int udp_socket;
struct hostent* hostinfo;

struct sockaddr_in name;

udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

int optval=1;

int a=setsockopt (udp_socket, SOL_SOCKET, SO_BROADCAST, &optval, sizeof (optval));

if (a==-1) perror (NULL);

name.sin_family=AF_INET;

hostinfo=gethostbyname("255.255.255.255";-);
if (hostinfo==NULL) return 1;
else name.sin_addr=*((struct in_addr *) hostinfo->h_addr);
name.sin_port=htons(50138);

int c=connect (udp_socket,(const sockaddr*) &name, sizeof (struct sockaddr_in));
if (c==-1)
{
perror ("connect";-);
}

//..........
//Отправка сообщения
//..........

close (udp_socket);
return EXIT_SUCCESS;
}
---
Re: UDP протокол - отправка/приём сообщений на/с широковещательных адресов 28.03.2004 19:00unDEFER # route add -net 255.255.255.0 netmask 255.255.255.0 dev eth0
После этого сеть стала доступной, но всё-таки не получается принимать отправленные сообщения - похоже они и не отправляются Грустный
Что делать?
Широковещательный адрес 192.168.0.255 тоже не помогает. Почему не передаются данные? Подскажите пожалуйста.
Через НЕ широковещательный адрес всё проходит замечательно. А тут?

Передаём командой:
---
write (udp_socket, text, strlen(text)+1);
---
при этом она возвращает положительной значение, т.е. вроде данные передались
Re: UDP протокол - отправка/приём сообщений на/с широковещательных адресов 29.03.2004 22:19unDEFER Стало совешенно ясно, что сообщения всё же отправляются, но принять их с широковещательного адреса ни в какую не выходит.

Программа-сервер:

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <sys/poll.h>

#include <arpa/inet.h>

int main(int argc, char *argv[])
{
int udp_socket;
struct sockaddr_in name;
struct hostent* hostinfo;

int client_sent_quit_message;

udp_socket = socket(PF_INET, SOCK_DGRAM, 0);

if (udp_socket==-1)
{
perror("socket";-);
return -1;
}

int optval=1;
if ( setsockopt(udp_socket, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)) != 0 ) perror("set SO_BROADCAST failed";-);

name.sin_family=AF_INET;

//Пытался ставить уже всевозможные значения и 0.0.0.0 и 192.168.0.4 (мой реальный IP адрес), 192.168.0.0, 192.168.255 - ничего не помогает! Что не так?
hostinfo=gethostbyname("0.0.0.0";-);
if (hostinfo==NULL) return 1;
else name.sin_addr=*((struct in_addr *) hostinfo->h_addr);

name.sin_port=htons(50138);

if (bind (udp_socket,(const sockaddr*) &name, sizeof (name))<0)
{
perror ("bind";-);
exit (-1);
};

struct pollfd ufds;
ufds.fd=udp_socket;
ufds.events=POLLIN;

int c=poll(&ufds,1,-1);

fprintf (stdout, "%d ", c);

if (c==-1) perror (NULL);
if (c>0)

char* text;
text=(char*) malloc (256);
read (udp_socket, text, 256);
printf ("%s ", text);
free (text);

close (udp_socket);

return EXIT_SUCCESS;
}
Re: UDP протокол - отправка/приём сообщений на/с широковещательных адресов 30.03.2004 16:04Cobalt Поясните пожалуйста, что вы понимаете под
"принимать тоже) на широковещательные адреса"
?
Re: UDP протокол - отправка/приём сообщений на/с широковещательных адресов 30.03.2004 18:12unDEFER Cobalt писал(а):

> Поясните пожалуйста, что вы понимаете под
> "принимать тоже) на широковещательные адреса" ?

Ой, я имел ввиду, принимать информацию посланную на широковещательный адрес. Не получается. Принимается когда, информация послана на один конкретный адрес (192.168.0.4), а когда послана на широковещательный адрес я принять её не могу.
Не разбирать же мне исходный код ethereal (у него получается принимать всё то, что я посылаю)
Re: UDP протокол - отправка/приём сообщений на/с широковещательных адресов 30.03.2004 21:40unDEFER После того как убрал шлюз - тема:
[forum.asplinux.ru]

всё стало приниматься Улыбка
RSS-материал