【发布时间】:2011-06-28 06:43:22
【问题描述】:
我正在为我的实际项目而疯狂......
我有一个在特定端口上发送数据的设备。我的目标是检测该端口上的所有此类设备。 示例:我在同一个网络上有 4 台这种设备,我会用 iPhone 检测所有这些设备。
它适用于 JAVA 发现工具,现在我正尝试在我的 iPhone 上进行。
JAVA发现工具中使用的步骤有:
- 创建 DatagramSocket (JAVA)
- 获取广播地址(255.255.255.255)
- 创建数据报包 (JAVA)
- 使用端口 30303 在广播地址上发送数据包
- 进入接收模式
- 由于套接字,它得到了答案数据包
- 从设备中提取 ip 和主机名
我尝试使用 AsyncUdpSocket 类来重现相同的步骤:http://code.google.com/p/cocoaasyncsocket/
这是我迄今为止尝试过的代码:
NSError *e;
NSString *d = @"abcd";
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding];
ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
[ssocket setDelegate:self];
[ssocket enableBroadcast:YES error:&e];
[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e];
[ssocket sendData:data withTimeout:-1 tag:0];
[ssocket receiveWithTimeout:-1 tag:0];
代表- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port从未被调用...
我不知道出了什么问题..你能就这个问题给我你的意见吗?如果我使用正确的方法,看看我是否做错了什么?
提前谢谢你!
莫克斯
编辑:
我使用 wireshark 通过 JavaDiscoverTool 和我的应用程序来嗅探网络流量。 事实上,两个数据包(iphone 和 javadiscovertool)之间的区别在于源端口。 实际上,在我的应用程序中,源端口与目标端口不同,我认为这是导致问题的原因。 我需要找到一种方法来强制我发送的数据包上的源端口......
有什么想法吗?它在 AsyncUdpSocket 类上。
【问题讨论】:
-
你检查过错误对象吗?这就是它们的优点。
标签: iphone sockets networking ios-4.2 listen