Ich versuche, einen UDP-Socket zu erstellen und Daten an einen Broadcasting-Port zu senden, so dass ich dieselben auf anderen Geräten im selben WiFi-Netzwerk empfangen kann. Ich berechne die IP-Adresse des Sendeanschlusses wie in der angenommenen Antwort here angegeben.GCDAsyncUDPSocket: Keine Daten empfangen, obwohl es erfolgreich gesendet wurde
Danach habe ich einigen Verbindungscode geschrieben, die als unten:
self.udpSocket = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue() socketQueue:nil];
NSError *error;
[self.udpSocket enableReusePort:YES error:&error];
[self.udpSocket enableBroadcast:YES error:&error];
- (IBAction)sendMessageToBroadcastPort:(id)sender {
[self.udpSocket sendData:[@"Hi" dataUsingEncoding:NSUTF8StringEncoding] toHost:[self getUDPBroadcastAddress] port:5556 withTimeout:-1 tag:1];
}
bekomme ich Erfolg die Daten als Delegatmethode didSendData beim Senden: aufgerufen wird.
Bitte führen Sie mich an, was ich hier vermisse.
Danke!
UPDATE: Cpde für die Daten aus dem Rundfunkempfangsöffnung:
- (void)listenForPackets
{
dispatch_queue_t dQueue = dispatch_queue_create("client udp socket", NULL);
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dQueue socketQueue:nil];
NSError *error = nil;
if (![udpSocket bindToPort:5556 error:&error]) {
NSLog(@"Error binding: %@",error);//not connecting to host
return;
}
if (![udpSocket beginReceiving:&error]) {
NSLog(@"Error receiving: %@",error);
return;
}
NSLog(@"Socket Ready");
}
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (msg)
{
NSLog(@"RCV: %@", msg);
}
else
{
NSString *host = nil;
uint16_t port = 0;
[GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address];
NSLog(@"Unknown message from : %@:%hu", host, port);
}
}
Die Ausstrahlung IP, die ich nach der Berechnung erhalten, ist
192.168.2.255UPDATE 2::
Das Szenario, dem ich gegenüberstehe, ist wirklich anders und komisch. Das Empfangen funktioniert manchmal und manchmal nicht. Wenn ich zwei Apps installiert habe, wurden keine Daten empfangen. Nur das Senden war erfolgreich. Ich habe die Apps aktiviert und nach einiger Zeit hat die App Daten empfangen. In einigen Fällen hörte es nach einiger Zeit auf zu empfangen oder erhielt ohne irgendein Problem weiter. Was kann das Problem sein?
Sie brauchen nicht zu nennen 'connectToHost' als UDP ist Verbindung weniger. Sie sollten 'sendData: toHost: port: withTimeout' verwenden. – Paulw11