【问题标题】:Sending UDP packet from iPhone to PC via WLAN通过 WLAN 将 UDP 数据包从 iPhone 发送到 PC
【发布时间】: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


【解决方案1】:

方法

sendData:toHost:port:withTimeout:tag:
sendData:toAddress:withTimeout:tag:

用于发送带有 未连接 套接字的消息,因此您不应调用connectToHost。对于已连接的主机,您可以使用

sendData:withTimeout:tag:

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多