使用cocoaasyncsocket通过UDP传输字符串

时间:2010-10-08 05:26:45

标签: ios4

过去几个月我一直在教自己Objective-C;我正在为我的公司构建一个iPhone应用程序。我开始时(现在仍然是)一个完整的新手,但直到现在我在网上各个地方轻松找到我所有问题的答案都没有问题。

对于我的应用程序的最终,也是最重要的部分,我需要在按下按钮时通过UDP向地址/端口发送一个简单的字符串。字符串,地址和端口都是从传递给视图控制器的对象中提取的变量。

我一直在寻找解决方案和阅读示例两天,但是对我来说,所有内容都像希腊文一样严肃。我不确定我似乎错过了哪些重要的知识,但我完全失去了。我了解了cocoaasyncsocket,以及它是多么“简单”,这听起来非常适合我需要的东西,但我似乎无法将它包裹起来。我真的希望有人可以帮我把它简单化解。

以下是我一直在尝试的代码片段,但没有运气。此代码来自我的viewController,导入AsyncUdpSocket.h

-(IBAction)udpButtonTwoPressed:(id)sender {
    NSData *myData;
    myData = [[NSData alloc] initWithData:([selectedObject
      valueForKey:@"udpCommandTwo"])];

    AsyncUdpSocket *mySocket;
    mySocket = [[AsyncUdpSocket alloc] initWithDelegate:self ];

    NSError *error = nil;
    if (!([mySocket connectToHost:([selectedObject
      valueForKey:@"serverIPAddress"]) onPort:([[selectedObject
      valueForKey:@"serverPort"] intValue]) error:&error])) {
        NSLog(@"Can't Connect Cause: %@", error);
        abort();
    }

    [mySocket close];

    [mySocket release];
    [myData release];
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

从你的例子中可以看出两件事。

  1. 我没有看到你在套接字上写任何东西。看看writeData:withTimeout:tag。

  2. CocoaAsyncSocket是异步的,所以在你的例子中,一切都超出了范围。如果您真的想要同步编写,那么参考中就有一个例子。

    NSString * customRunLoopMode = @“MySyncWrite”;

    [asyncSocket addRunLoopMode:customRunLoopMode]; [asyncSocket writeData:didBackgroundData withTimeout:TIMEOUT_NONE标记:TAG_BG];

    syncWriteComplete = NO; BOOL runLoopReady = YES;

    while(runLoopReady&&!syncWriteComplete) {         runLoopReady = [[NSRunLoop currentRunLoop] runMode:customRunLoopMode                                                 beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; }

    [asyncSocket removeRunLoopMode:customRunLoopMode];

  3. HTH

相关问题