gpt4 book ai didi

iPhone 套接字流行为 - 将字节发送到服务器.. NSStream/CFStream

转载 作者:可可西里 更新时间:2023-11-01 06:12:20 28 4
gpt4 key购买 nike

大家好,感谢收看,

环境说明

我正在开发一个与监听端口 2000 的 arduino(服务器,用于所有实际目的)通信的应用程序。连接到 arduino 是通过临时网络完成的,因此“服务器”是 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];
}

我已经创建了这个函数来发送定义的字节,但是我不确定我是否正确地这样做了。以十六进制/二进制格式发送字节的解释将非常有用,因为我在研究中没有找到好的教程/代码片段。这适用于工作正常的计时器(用于按住按钮)。我特别想知道我是否正确发送了字节。

- (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 上)像圣诞树一样亮起。如果 arduino 在端口 2000 上接收某些字节,那么这些 LED 亮起的唯一方法是。这很奇怪,因为我认为我只发送了一个特定字节 0x00F0。在上面的代码中,是否有任何原因会发送 0x00F0 以外的字节?即打开套接字和读/写流是否发送任何字节?

此外,将非常感谢将二进制数据(即 0001 或 10000000)或十六进制数据(即 0F)发送到套接字/流的示例。如果我这样做完全错误,或者如果有更简单的方法将字节发送到服务器,我也有兴趣学习它!

如果需要任何其他信息,请询问,我会尽力提供。

感谢您花时间阅读本文,我期待您的回复!

--约翰

最佳答案

这里的问题是您正在创建一个长度为 1 的 NSMutableData(最初包含字节 0x00),然后附加 0xf0 到它。也就是说,您的 NSMutableData 实际上长度为 2 并且包含 0x00 0xf0

此外,NSMutableData 在这里似乎没有任何用处,除了使您的代码复杂化之外。你可能想要更像的东西:

- (void)sendByteF0:(NSTimer *)timer
{
uint8_t byte = 0xf0;
[outputStream write:&byte maxLength:1];
}

您还可以考虑注意 -write:maxLength 方法的结果,因为它可能会失败 — 在这种情况下,它可能会返回 0 或 -1,具体取决于发生的情况.

关于iPhone 套接字流行为 - 将字节发送到服务器.. NSStream/CFStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478227/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com