【发布时间】:2012-01-18 16:16:06
【问题描述】:
大家好,感谢收看,
环境说明
我正在开发一个与正在侦听端口 2000 的 arduino(服务器,出于所有实际目的)通信的应用程序。连接到 arduino 是通过 ad-hoc 网络完成的,因此“服务器”是 169.254.1.1。连接后,客户端将收到 169.254.0.0 子网中的 IP。
我当前的代码
经过一番修改(这是我第一次使用 Objective C),我设法打开一个套接字并使用以下代码在 iPhone 和 Arduino 之间建立读/写流...
在(void)viewDidLoad 我打电话
[self initNetworkCommunication];
并定义如下...
-(void) initNetworkCommunication
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"169.254.1.1", 2000, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
我已经创建了这个函数来发送定义的字节,但是我不确定我是否正确地这样做了。以十六进制/二进制格式发送字节的解释将非常有帮助,因为我在研究中没有找到好的教程/代码 sn-p。这适用于工作正常的计时器(用于按住按钮)。我特别想知道我是否正确发送了字节。
- (void)sendByte:(NSTimer *)timer
{
Byte allDown = 0x00F0;
NSMutableData *sendData = [NSMutableData dataWithLength:sizeof(allDown)];
[sendData appendBytes:&allDown length:sizeof(allDown)];
[outputStream write:[sendData bytes] maxLength:[sendData length]];
}
我的问题/疑问
在我的 iPhone 上构建/测试这个应用程序后,我连接到 Arduino 并按下连接到 sendByte 函数的按钮,看到我的 LED 指示灯(在 arduino 上)像圣诞树一样亮起。这些 LED 打开的唯一方法是 arduino 在端口 2000 上接收某些字节。这很奇怪,因为我认为我只发送了一个特定的字节 0x00F0。在上面的代码中,是否有任何理由发送 0x00F0 以外的字节?即打开套接字和读/写流是否发送任何字节?
此外,将非常感谢将二进制数据(即 0001 或 10000000)或十六进制数据(即 0F)发送到套接字/流的示例。如果我这样做完全错误,或者如果有更简单的方法将字节发送到服务器,我也有兴趣学习!
如果需要任何其他信息,请询问,我会尽力提供。
感谢您抽出宝贵时间阅读本文,期待您的回复!
--约翰
【问题讨论】:
-
你找到解决办法了吗?
标签: iphone objective-c ios sockets stream