5
我正在使用GCDAsyncUdpSocket
在我的應用程序中編寫UDP套接字。這種情況是這樣的:當用戶點擊按鈕時,它會在局域網中發送一個廣播數據包,然後監聽響應,局域網中有一臺服務器會響應一個UDP數據包。當應用程序收到響應時,它會做一些事情。爲什麼GCDAsyncUdpSocket無法在廣播模式下發送/接收數據包?
我設置GCDAsyncUdpSocket
爲如下:
- (void)setupSocket
{
_udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![_udpSocket bindToPort:18686 error:&error]) {
NSLog(@"Error binding: %@",error);
return;
}
if (![_udpSocket beginReceiving:&error]) {
NSLog(@"Error receiving: %@",error);
return;
}
if (![_udpSocket enableBroadcast:YES error:&error]) {
NSLog(@"Error enableBroadcast: %@",error);
return;
}
}
然後我在按鈕的動作發送分組如下:
NSString *host = @"255.255.255.255";
int port = 8585;
NSString *msg = @"Hello from iOS";
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[_udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:0];
在
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address
withFilterContext:(id)filterContext
方法我偵聽的端口做出頭。它在開始時運行良好,但如果稍後嘗試單擊該按鈕(大約1小時),則無法再發送UDP數據包。
我的局域網服務器將打印收到的數據。我認爲send方法有問題。所以我使用BSD套接字方法發送數據。並使用GCDAsyncUdpSocket
來接收回應。但一段時間後發生了同樣的事情。這次我可以發送但不能收到。
我是否錯過了GCDAsyncUdpSocket
?爲什麼一段時間後無法發送/接收?任何幫助將非常感激。
我有同樣的問題,你有理由嗎? –