过去几个月我一直在教自己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];
}
我在这里做错了什么?
答案 0 :(得分:0)
从你的例子中可以看出两件事。
我没有看到你在套接字上写任何东西。看看writeData:withTimeout:tag。
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];
HTH