【发布时间】:2012-09-20 13:48:25
【问题描述】:
在阅读了几个教程后,我想出了以下代码: (使用著名的 GCDAsyncUdpSocket 类)
NSError *error = nil;
if (![mSocket connectToHost:@"192.168.1.111" onPort:9050 error:&error])
{
NSLog(@"Error connecting: %@", [error description]);
}
usleep(100000);
NSString* str = @"teststring";
[mSocket sendData:[str dataUsingEncoding:NSUTF8StringEncoding] toHost:@"192.168.1.111" port:9050 withTimeout:-1 tag:1];
如果我在 iPhone 上运行此代码,一切似乎都很好(没有错误)。 但是数据包永远不会到达我的电脑上。
在我的 PC 上,一个 UDP 侦听器正在运行(与 Wireshark 一起)。两台设备都在同一个网络上,具有相同的子网和相似的 IP(我的 PC 是 192.168.1.111)。难道我做错了什么?希望是一个简单的错误?
【问题讨论】:
-
您是否为该套接字设置了委托?是调用 didConnectToHost 吗?
-
不,我没有实现委托(这是必需的吗?)。但是我在调用 connect 后检查了“isConnected”属性。设置为 TRUE。
-
嗯,理论上不需要,但不设置委托可能会出现问题,因为这不是常见的场景,可能没有经过彻底的测试。我会迅速实施它并试一试,看看它是否能解决任何问题。
-
在我调用“sendData”之后,不会调用回调“didSendDataWithTag”/“didNotSendDataWithTag”。我认为至少应该调用其中一个,对吧?
-
是的,他们应该这样做。我会进入 GCDAAsyncSocket 代码并在那里设置一些断点以查看发生了什么。另外,试试非 GCD 版本,看看会不会更好。
标签: iphone objective-c sockets udp send