これが私のコードです(ノードのjavascript):
var dgram = require('dgram');
var message = new Buffer("why hello beautiful");
var client = dgram.createSocket("udp4");
client.bind(41234);
client.setBroadcast(true);
client.send(message, 0, message.length, 41234, "134.71.147.255");
console.log('msg sent');
client.close();
これは、ノードを実行している私のコンピューターのifconfigです(私が考える唯一の関連事項-間違っている場合は修正してください):
inet addr:134.71.146.49 Bcast:134.71.147.255 Mask:255.255.254.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
udp ブロードキャストは iOS アプリで受信されず、パケット インスペクターからも見えません。何が問題なの?! iOS アプリは GCDAsyncUdpSocket フレームワークを使用します。
- (void) initUDPlistener {
NSLog(@"initUDPlistener");
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![udpSocket bindToPort:UDP_PORT error:&error]) //does the port matter? i dont know
{
return;
}
if (![udpSocket beginReceiving:&error])
{
return;
}
[udpSocket enableBroadcast:YES error:nil];
[udpSocket sendData:[self pack:@"iOS to bcast"] toHost:UDP_BCAST_ADDR port:UDP_PORT withTimeout:-1 tag:0];
}
#pragma mark -
#pragma mark Delegate UDP methods
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
NSLog(@"niets.");
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (msg)
{
NSLog(@"iets gekregen");
}
else
{
NSLog(@"Error convertion");
}
NSLog(@"HMMMM");
}
-(void) udpSocket:(GCDAsyncUdpSocket *) sock didSendDataWithTag:(long)tag {//called. and packet inspector recieves the packet when it is sent OUT from the iOS app.
NSLog(@"written data tag: %ld", tag);
}
-(void) udpSocket:(GCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address { //never called
NSLog(@"connected to some address");
}
何が起こるか: ノードブロードキャストから「didReceiveData」が呼び出されません。ただし、独自のメッセージを送信するときに呼び出されます。
一方、iOS アプリはブロードキャストに成功し、パケット インスペクターでそのパケットをインターセプトできます。ただし、同じパケット インスペクターは、ノードから発信されたはずのパケットを表示しません。
ノードで何が間違っていますか? ノードで何をしているのかが問題だと思います。