Xcode中如何使用C语言处理网络包

Posted

技术标签:

【中文标题】Xcode中如何使用C语言处理网络包【英文标题】:How to use C language in Xcode to deal with network packet 【发布时间】:2011-11-15 06:01:53 【问题描述】:

我刚买了一个WIFI摄像头。我需要开发一个 iPad 应用程序来向这个摄像头发送一个 url 请求,然后在 iPad 中播放 mpeg4 流。

收到请求后,本相机向 iPad 发送回网络数据包。在每个数据包的开头,它包含 8 位无符号字符,指示该数据包的类型,例如视频或音频。

由于 NSData 是 16bit 格式,我如何获取第一个 8bit unsigned char 并识别此数据包的类型?

我认为我走错了路。我应该关注数据包层,了解如何使用C语言处理网络数据包。但是,我现在不擅长 C 语言。谁能告诉我如何使用C来控制网络数据包。

【问题讨论】:

Objective-C 是 C 的超集。如果您使用 Objective-C 编写代码,您应该明确地学习更多关于 C 的东西。 谢谢麦克马德。我绝对需要学习更多的 C 编程。我在 C 中遗漏了太多基本概念。 如果您知道如何在 Objective-C 中编写代码,这并不难。尤其要了解指针/指针算法、强制类型转换、内在类型、结构、动态内存分配……成为一名优秀的 C 程序员只会让你成为一名更好的 Objective-C 程序员。 【参考方案1】:

如果您使用的是 NSData 对象,则可以使用bytes 方法检索指向 NSData 内容的指针。

此方法返回一个void 指针。您可以将其分配给任何您想要的。

例如:

unsigned char * x = [ myDataObject bytes ];

将允许您读取每个字节(8 位)的 NSData 内容,因为您有一个 char 指针。

x[ 0 ] 将是第一个字节,x[ 1 ] 将是第二个字节,依此类推。

如果你使用其他类型,你会得到不同的结果。例如:

unsigned short int * x = [ myDataObject bytes ];

假设unsigned short int 在您的平台上是 16 位(可能会有所不同),那么您将按 16 位访问 NSData 内容。

在最后一个示例中,x[ 0 ] 将是前 16 位,等等...

指针运算也是如此。

【讨论】:

嗨 Macmade,我已经在我的应用程序中尝试过这个。但是,它只是给了我不可读的字符。 typedef struct guchar content_type; gint media_header_length; 流。这是数据包开头的格式。这就是我这样做的原因。

以上是关于Xcode中如何使用C语言处理网络包的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何实现POST数据包

Xcode 13如何使用本地Swift包(Swift Package)

Xcode 13如何使用本地Swift包(Swift Package)

如何下载官方原版的Xcode安装包(dmg格式)?

如何在Mac下编写并运行C++程序

使用Xcode创建第一个c语言项目和源文件进行编程(xcodes使用教程)