GCDAsyncUdpSocket
アプリでUDPソケットを作成するために使用しています。シナリオは次のようなものです。ユーザーがボタンをクリックすると、LAN にブロードキャスト パケットが送信され、応答がリッスンされます。LAN には 1 つの UDP パケットで応答するサーバーがあります。アプリが応答を受け取ると、何かを実行します。
私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 パケットを送信できなくなります。
LAN 内のサーバーは、受信したデータを印刷します。send メソッドに問題があると思いました。だから私はBSDソケットメソッドを使ってデータを送信します。GCDAsyncUdpSocket
応答を受け取るために使用します。しかし、しばらくして同じことが起こりました。今回は送信はできますが、受信できません。
私は何かが欠けていGCDAsyncUdpSocket
ますか?しばらくすると送受信できないのはなぜですか?どんな助けでも大歓迎です。