UDP 포트를 만들고 브로드 캐스트 포트로 데이터를 보내려고합니다. 동일한 WiFi 네트워크에있는 다른 장치에서도 동일한 데이터를 수신 할 수 있습니다. 수신 된 응답 here에 주어진대로 브로드 캐스트 포트의 IP 주소를 계산 중입니다.GCDAsyncUDPSocket : 성공적으로 전송되었지만 데이터를받지 못했습니다.
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];
}
내가 위임 방법 didSendData로 데이터를 전송에 성공을 얻을 : 호출되는
는 그 후 나는 다음과 같습니다 일부 연결 코드를 작성했습니다.
여기에 무엇이 누락되어 있는지 안내해주십시오.
감사합니다.
UPDATE : 방송 포트로부터 데이터를 수신 Cpde :
- (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);
}
}
I를 계산 한 후 얻을 방송 IP는 192.168.2.255
UPDATE 2 : :
내가 직면하고있는 시나리오는 정말 다르며 이상합니다. 수신은 때로는 작동하며 때로는 수신하지 않습니다. 두 개의 앱을 설치했을 때 데이터가 수신되지 않았습니다. 전송 만 성공했습니다. 나는 앱이 데이터 수신을 시작한 지 얼마되지 않아 계속 유지했다. 경우에 따라 잠시 후 수신을 중단하거나 문제없이 수신을 계속합니다. 문제는 무엇이 될 수 있습니까?
UDP는 연결이 적기 때문에'connectToHost'를 호출 할 필요가 없습니다. 'sendData : toHost : port : withTimeout'을 사용해야합니다. – Paulw11