5

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ますか?しばらくすると送受信できないのはなぜですか?どんな助けでも大歓迎です。

4

1 に答える 1