【问题标题】:How to listen on a specific port on iPhone ios4.2?如何在 iPhone ios4.2 上监听特定端口?
【发布时间】: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


【解决方案1】:

我找到了解决方案。

使用:

NSError *e;
NSString *d = @"Discovery: Who is out there?\0\n";
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding];


ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
[ssocket setDelegate:self];

[ssocket bindToPort:PORT error:&e];

[ssocket enableBroadcast:YES error:&e];


//[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e];


//[ssocket sendData:data withTimeout:-1 tag:0];

[ssocket sendData:data toHost:@"255.255.255.255" port:30303 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
{
    NSString* aStr;

    aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];


    NSLog(@"didreceivedata : %@", aStr);

    return NO;


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2011-09-14
    相关资源
    最近更新 更多