我正在尝试让 iPhone 的程序在模拟器上运行。我的问题是接收 UDP 数据。我使用异步 Udp 套接字。如果我制作一个套接字并使用sendData:(NSData) toHost:
,...效果很好。
我想我无法弄清楚接收功能是如何工作的。
我假设是这样的:
socket = [[AsyncUdpSocket alloc] initWithDelegate:self];
[socket bindToPort:8000] error:nil] //returns YES
[socket receiveWithTimeout:-1 tag:1];
我相信它应该调用该方法-(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long) fromHost:(NSString *)host port:(UInt16)port
好吧,我在该方法中放入了 NSLog,但它从未被调用。那么 [socket receive,..] 是唯一的接收方法,所以我想它应该是那个......或者我必须使用另一种方法吗?或者我是否必须对我的代表进行一些补充或其他什么...我只是不知道我必须如何做到这一点
我搜索了 asyncUdpSocket 示例、教程、操作方法等,但我就是找不到示例。因此,如果有人愿意解释它或知道有一个很好的解释的坐姿,我们将非常感激。
如果您不知道答案,无论如何感谢您的阅读!
我是 Objective C 的新手(所以请忍受我对它的无知),但在大多数情况下我已经能够让 AsyncUdpSocketDelegate 接收。需要尝试/确认的一些事情:
确保self
您正在初始化为套接字委托的类是您期望回调的类。
-
确保您的班级采用AsyncUdpSocketDelegate
协议。我不确定这是否真的有必要,但这不会有什么坏处。在你的类标题中,看起来像:
@interface |your class| : |super class| <|Other protocol(s)|, AsyncUdpSocketDelegate> {
Make sure you have your delegate methods declared in your interface and implementation. The method signature should look like this:
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port;
尝试打电话receiveWithTimeout
具有非零超时值。可能会给你不同的结果。
使用 Wireshark 确保您是
事实上接收 UDP 数据时
你认为自己在哪里。我不是
试图侮辱你的智商
但我花了很长时间尝试
追踪网络代码错误
问题实际发生时的过去
我的网络配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)