en0似乎是Apple iOS设备的wifi接口,但是在我的代码中,当我指定接口en0时,小型多播客户端我没有收到任何东西。什么可能是错的任何线索? GDCasyncUdpSocket日志不显示任何错误=> 将套接字绑定到端口(1234)接口((en0))
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//log test
[DDLog addLogger:[DDTTYLogger sharedInstance]];
// Create multicast High Priotity queue
mcastQueue = dispatch_queue_create("mcastQueue", NULL);
dispatch_queue_t high = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_set_target_queue(mcastQueue, high);
// Create UDP Socket
mcastSocket=[[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:mcastQueue];
[mcastSocket setPreferIPv4];
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSError *socketError=nil;
if (![mcastSocket bindToPort:1234 interface:@"en0" error:&socketError]) {
NSLog(@"Failed binding socket to port: %@" ,socketError);
return;
}
if (![mcastSocket enableBroadcast:YES error:&socketError]) {
NSLog(@"Failed enabling broadcast: %@" ,socketError);
return;
}
if (![mcastSocket joinMulticastGroup:@"239.0.0.1" error:&socketError]) {
NSLog(@"Failed joining multicast group: %@" ,socketError);
return;
}
//start receiving multicast data
if (![mcastSocket beginReceiving:&socketError]) {
[mcastSocket close];
NSLog(@"Failed to start receiving: %@" ,socketError);
} else {
NSLog(@"Multicast start receiving");
}
}
此致
答案 0 :(得分:1)
经过一年左右的间歇性尝试解决这个问题并放弃,我终于发现了我认为的答案。
答案是,在接收UDP数据包时, 不 绑定到接口。 (见https://stackoverflow.com/a/10739443/179216)
相反,您应该在 加入 多播群组时指定界面:
// Do *not* specify the interface here
if (![mcastSocket bindToPort:1234 error:&socketError]) {
NSLog(@"Failed binding socket to port: %@" ,socketError);
return;
}
if (![mcastSocket enableBroadcast:YES error:&socketError]) {
NSLog(@"Failed enabling broadcast: %@" ,socketError);
return;
}
// This is where you specify the interface
if (![mcastSocket joinMulticastGroup:@"239.0.0.1" onInterface:@"en0" error:&socketError]) {
NSLog(@"Failed joining multicast group: %@" ,socketError);
return;
}