gpt4 book ai didi

iOS:发送缓冲区中的套接字连接错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:25 24 4
gpt4 key购买 nike

我们尝试了太多不同的方法来解决我们的问题,也在网上进行了搜索,但我们只找到了发送字符串的示例,而不是字节数组。我们需要通过套接字连接发送字节数组。请阅读下面的问题说明。

我们需要将 Wi-Fi 设备与 iOS 应用程序连接。我们已成功连接设备,但当我们以字节数组格式发送命令时,它返回 NSStreamEventHasSpaceAvailable 作为响应。这是错误的,我们需要 NSStreamEventHasBytesAvailable 事件。

连接代码如下:

-(void) initNetworkCommunication:(NSString*)strHostName {

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)strHostName, 2000, &readStream, &writeStream);

inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;



[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];

}

当连接打开时,我们调用下面的方法来发送命令:

 - (IBAction) sendCommand {
unsigned char *buffer[5] = {0x3a,0x04,0x01,0x07,0x0c};

NSData *data = [NSData dataWithBytes:buffer length:5];
[outputStream write:[data bytes] maxLength:5];

}

所以 sendCommand 方法中存在一些问题,因为我们正在接收 NSStreamEventHasSpaceAvailable,这是错误的。因为它应该在响应中返回 NSStreamEventHasBytesAvailable。任何人都可以帮助我们如何在 iOS 中发送字节数组 {0x3a,0x04,0x01,0x07,0x0c} 以便我们可以接收 NSStreamEventHasBytesAvailable 事件。

根据命令手册,当设备接收到格式正确的命令时,它会返回确认。以下是手册说明。

All commands are 16 bits and are placed in the Data byte 1(MSB) and Data byte 2(LSB). The response to a command can either be a specific response relating to the command or a simple response. The three simple responses are ACK, NAK and UNK. An ACK signifies that the command was received successfully. A NAK indicates that there was an error with either the length byte or an incorrect checksum was calculated. An UNK response indicates that the recipient does not recognize the command that was sent.

  • 值回答状态
    • 0x06 = 确认(确定)
    • 0x15 = NAK(不正确)
    • 0x09 = UNK(未知命令)

所以我们应该收到上述任何标志(ACK 或 NAK 或 UNK),但我们收到的是 NSStreamEventHasSpaceAvailable,这是错误的。任何人都请帮助我解决我的问题。

提前致谢。

最佳答案

NSStreamEventHasSpaceAvailable 是在输出流上发送数据后要接收的正确事件 - 它表示您可以写入至少一个字节而不会阻塞(即有可用空间写入数据)。 NSstreamEventHasBytesAvailable 将在与该输入流关联的套接字上接收到数据时针对输入流发出信号,以指示您可以发出读取而不会阻塞。

如果您要发送数据的设备响应该数据,那么我希望您在 inputStream 上收到 NSStreamEventHasBytesAvailable

关于iOS:发送缓冲区中的套接字连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28741114/

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