ios 套接字输出流字节

ios socket outputstream bytes

我在website上找到这些代码,并改写成我现在的代码 ,我可以成功连接到服务器side.But我还有一些问题:

outputStream:

根据网站上的代码,我可以正常发送字符串

- (IBAction)sendCmd:(id)sender
{
    NSString *response  = @"Hello World!";
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
    [outputStream write:[data bytes] maxLength:[data length]];
}

但我想发送字节,(例如0x80,0x10,0x20...等等) Android 语法为:

         byte[] buf=new byte[10];
                buf[0]=(byte) 0x80;  
                buf[1]=(byte) 0x10; 
                buf[2]=(byte) 0x20;  

但是换成了ios,不知道怎么办? 给点建议或者网址,感激不尽

当您说 "I have bytes" 时,大概意味着:

  • 您有一个 NSData 或类似的类型保存字节。您可以看到如何从现有示例中获取字节和长度——只需跳过将 NSString 编码为 NSData 的部分,因为您已经有一个 NSData.

  • 你有一个原始的 C 缓冲区(通过 void *char *unsigned char * 或类似的)和一个长度。这正是 -[NSOutputStream write: maxLength:] 想要 的;在您的示例传递 [data bytes][data length] 的地方,只需传递您的指针(可能带有转换)和长度值。

例如:

const char msg[] = "\x80\x10\x20";
const NSUInteger msglen = sizeof(msg) / sizeof(*msg);
[outputStream write:(const uint8_t *)msg maxLength:msglen];

如果出于某些奇怪的原因,你真的想要一个与你的 Android 代码完全相同的 ObjC,它看起来像这样:

NSMutableData *data = [NSMutableData dataWithLength:10];
uint8_t *buf = (uint8_t *)[data mutableBytes];
buf[0]=(uint8_t)0x80;
buf[1]=(uint8_t)0x10;
buf[2]=(uint8_t)0x20;
[outputStream write:buf maxLength:3]; // or is that 10?

我不确定你为什么要创建一个 10 字节的缓冲区并且只填充 3 个字节,但是 +dataWithLength 和 Android 做同样的事情 Java 然后离开其他 7 个位置用 0 填充,如果这是你想要的。

(您也可以只使用 calloc 并根据需要跳过所有 ObjC 内容,但是您必须处理检查 NULL,最后调用 free即使某处出现错误等,因为 C 不是 Java…)