Meine selbstgeschriebenen Socket-Anwendungen ignorieren grundsätzlich Broadcasts an die Broadcast-Adresse des Netzwerks.
Am Sender kanns nicht liegen, die Windows-Pendants erkennen die Pakete.
Irgendwelche Ideen?
Thx
Marcus
UDP-Broadcast ignoriert
Re: UDP-Broadcast ignoriert
Zeig mal die Quellcode-Fragmente für die Socket verbindungen...
Re: UDP-Broadcast ignoriert
Socket öffnen:
...
struct sockaddr_in in_addr;
sock=socket(AF_INET, type, 0);
if (sock<0){
printf("Error opening socket");
exit(-1);
}
in_addr.sin_family=AF_INET;
in_addr.sin_port= htons(port);
in_addr.sin_addr.s_addr=inet_addr(ipAddress);
memset(&(in_addr.sin_zero),'\0',8);
if ((result=bind(sock, &in_addr, sizeof(struct sockaddr)))<0){
printf("Error binding socket");
exit(-1);
}
...
- Datagram lesen
...
struct sockaddr_in source_addr;
source_addr.sin_family=AF_INET;
source_addr.sin_port=7200;
target= sizeof(struct sockaddr_in);
bufferLength=recvfrom(socket,buffer,65535,0, &source_addr, &target);
...
...
struct sockaddr_in in_addr;
sock=socket(AF_INET, type, 0);
if (sock<0){
printf("Error opening socket");
exit(-1);
}
in_addr.sin_family=AF_INET;
in_addr.sin_port= htons(port);
in_addr.sin_addr.s_addr=inet_addr(ipAddress);
memset(&(in_addr.sin_zero),'\0',8);
if ((result=bind(sock, &in_addr, sizeof(struct sockaddr)))<0){
printf("Error binding socket");
exit(-1);
}
...
- Datagram lesen
...
struct sockaddr_in source_addr;
source_addr.sin_family=AF_INET;
source_addr.sin_port=7200;
target= sizeof(struct sockaddr_in);
bufferLength=recvfrom(socket,buffer,65535,0, &source_addr, &target);
...
Re: UDP-Broadcast ignoriert
> Socket öffnen:
>
> ...
> struct sockaddr_in in_addr;
> sock=socket(AF_INET, type, 0);
ich geh mal davon aus in type steht SOCK_DGRAM
> if (sock<0){
> printf("Error opening socket");
> exit(-1);
> }
> in_addr.sin_family=AF_INET;
> in_addr.sin_port= htons(port);
ist port = 7200 ?
> in_addr.sin_addr.s_addr=inet_addr(ipAddress);
müsste meiner Ansicht heißen:
in_addr.sin_addr.s_addr=INADDR_ANY;
(liest dann auf allen der Maschine zugehörigen Adressen)
> memset(&(in_addr.sin_zero),'\0',8);
> if ((result=bind(sock, &in_addr, sizeof(struct sockaddr)))<0){
> printf("Error binding socket");
> exit(-1);
> }
> ...
>
> - Datagram lesen
>
> ...
> struct sockaddr_in source_addr;
> source_addr.sin_family=AF_INET;
> source_addr.sin_port=7200;
versuchs mit
source_addr.sin_port=htons(7200);
> target= sizeof(struct sockaddr_in);
> bufferLength=recvfrom(socket,buffer,65535,0, &source_addr, &target);
> ...
Gruß Oliver
>
> ...
> struct sockaddr_in in_addr;
> sock=socket(AF_INET, type, 0);
ich geh mal davon aus in type steht SOCK_DGRAM
> if (sock<0){
> printf("Error opening socket");
> exit(-1);
> }
> in_addr.sin_family=AF_INET;
> in_addr.sin_port= htons(port);
ist port = 7200 ?
> in_addr.sin_addr.s_addr=inet_addr(ipAddress);
müsste meiner Ansicht heißen:
in_addr.sin_addr.s_addr=INADDR_ANY;
(liest dann auf allen der Maschine zugehörigen Adressen)
> memset(&(in_addr.sin_zero),'\0',8);
> if ((result=bind(sock, &in_addr, sizeof(struct sockaddr)))<0){
> printf("Error binding socket");
> exit(-1);
> }
> ...
>
> - Datagram lesen
>
> ...
> struct sockaddr_in source_addr;
> source_addr.sin_family=AF_INET;
> source_addr.sin_port=7200;
versuchs mit
source_addr.sin_port=htons(7200);
> target= sizeof(struct sockaddr_in);
> bufferLength=recvfrom(socket,buffer,65535,0, &source_addr, &target);
> ...
Gruß Oliver