问题标签 [nsoutputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
409 浏览

ios - iOS:应用程序从后台返回后访问 EAOutputStream 时的 SIGPIPE

我有一个 iPhone 应用程序(iOS 7.0),它通过 ExternalAccessory 库与蓝牙 2.1 传感器设备交互。如果应用程序通过任何常用方法(锁定、主页按钮、自动睡眠等)进入后台,当它尝试恢复写入应用程序用于与设备通信的NSOutputStream发现时,它会获得一个 SIGPIPE。EASession我还收到一个内部错误,原因是EAOutputStream说发生了写入错误。

从那时起,我永远无法写入输出流,它总是返回状态NOhasSpaceAvailable5(到达流结束)。

潜在的兴趣:指向显示的EAAccessory那个,但来自显示的那个。它们具有相同的属性。在这种情况下,传感器设备的链接灯保持亮起,访问“设置”>“蓝牙”屏幕将设备显示为“已连接”。强制退出应用程序并重新启动是恢复通信的唯一方法。EASessionconnected: NO[[EAAcessoryManager sharedAccessoryManager] connectedAccessories]connected: YESconnectionId

有谁知道我应该如何正确处理这个?我是否需要在应用程序进入后台之前向流发送“关闭”命令并在它返回时再次“打开”它们?

0 投票
1 回答
3598 浏览

ios - 从内存中的 NSOutputStream 获取 NSData?

我想使用 NSOutputStream 来累积数据,然后在完成后创建一个包含内容的 NSData 对象。当输出流基于文件时我可以这样做,如下:

我希望在不创建临时文件的情况下填充“内容”变量。我可以在内存中做这一切吗?我在NSOutputStream 文档中没有看到 API 。

0 投票
0 回答
143 浏览

objective-c - NSStream 停止接收要处理的事件

我创建了一个小型上传器。它基本上连接到 FTP 服务器并从我的本地文件夹上传文件。它现在可以工作,但我的问题是,有时我的 NSStream(输出/输入)停止响应。一开始,您会收到诸如流打开、有可用空间等事件。但是,有时它会突然停止接收流事件。它只是卡在那里等待调用事件。有谁知道可能会做什么?是连接问题吗?有没有办法避免它?谢谢。

0 投票
1 回答
372 浏览

ios - 在 NSInputStream 中使用 base64 编码

我正在使用 RNCryptor 加密文件,对于大文件,我使用 NSInputStream 将文件分成块并编码/解码这些块。在我需要对传递给流的块进行 base64 编码/解码之前,它工作得很好。

以下代码非常适合编码,除了它不进行 base64 编码:

我尝试在数据加密后和写入输出流之前添加 base64 编码:

但这在输出文件中给了我不正确的结果。

我获得正确编码/解码数据的唯一正确方法是将整个文件加载到内存中并调用编码/解码方法。

我想避免这种情况,因为我需要对大文件进行编码/解码,例如视频、声音和图像。

有什么安全的方法可以做到这一点吗?

0 投票
2 回答
3677 浏览

ios - 创建一个特定大小的空文件并使用 fseek 将新数据写入特定位置

我是 ios 新手,我有 10 个 1024 字节的块。这些块不按顺序排列。如果我知道块的数量,我如何将数据插入大小为 10*1024 的文件中?到目前为止,我有以下代码:

如何使用 fseek 添加新数据?

我确实尝试使用以下代码:

但是如果块的顺序不正确,结果文件并不完全正确。如果块的顺序正确,则结果文件将正确显示。

0 投票
1 回答
2286 浏览

ios - swift OutputStream 找不到成员“写”

我正在尝试将数据发送到 OutputStream 以与另一台设备通信。(为此我使用外部附件框架)但该功能不起作用。我有错误找不到成员“写”。我希望有人可以帮助我找到解决方案。谢谢你。

错误--------> var bytesWritten: Int = _session?.outputStream.write(_write.bytes, _write.length);

有我打开和关闭会话的功能

//打开与附件的会话并在默认运行循环上设置输入和输出流 func openSession(accessory: EAAccessory, withProtocolString protocolString: String) -> ObjCBool​​{

0 投票
2 回答
78 浏览

ios - 快速转换

我知道这个问题之前必须以另一种形式提出过。从我的角度来看,我正在尝试写NSOutputStream一条我正在撰写的来自不同事物的消息。

当我尝试通过连接多个字符串来做出响应时出现错误。我得到的错误是UInt8当我尝试连接self.messageText.text.

当我尝试添加响应变量时也会发生同样的事情

0 投票
1 回答
127 浏览

ios - NSOuputStream 发送旧值 - 目标 C

我创建了用于发送/接收值的套接字的代码。我都做了。第一次效果很好。我面临的问题是每当我第二次发送新值时,旧值都会被传递。就像,我第一次向套接字发送 0 值时,套接字端的日志文件在日志文件中接收为“0”,并且我从服务器接收到数据,它运行良好。但是当我将另一个值(如“2”)发送到套接字时,但服务器套接字在日志文件中接收先前的值作为“0”。我无法发送新值。

我的代码是

Appdelegate.h

Appdelegate.m

在 Windowcontroller.h 中

一个对象 = @“2”;

每当我第二次调用时,流“NSStreamEventHasSpaceAvailable”函数只会触发。但从未调用过“NSStreamEventHasBytesAvailable”函数。我在这里缺少/问题。等待您的回复。任何帮助。提前致谢。

0 投票
1 回答
377 浏览

tcp - 通过 TCP 将 JPEG NSData 发送到 Python 服务器

我有一个带有 iOS 客户端的 Python tcp 服务器。它能够发送和接收数据,我遇到的唯一问题可能是编码。我正在尝试通过 TCP 将 JPEG 发送到 Python 服务器并将数据写入服务器上的 JPEG。jpeg不断损坏。

客户端 Obj-C 代码:

这是python(扭曲的)服务器代码:

0 投票
0 回答
569 浏览

ios - iOS 输入流仅在输出流同时发送时才接收快速数据

我的 iOS 应用程序需要套接字通信。我正在关注这个Ray Wenderlich 教程来设置输入和输出流。我使用的服务器是 Twisted。我的应用程序需要发送和接收由外部事件(如陀螺仪数据)生成的快速数据突发。它以 JSON 字符串的形式发送/接收数据。所以在很大程度上,它非常像一个实时消息聊天应用程序,但发送和接收速度非常快并且是突发的。

所以我的应用程序布局是我有 1 个视图控制器:DViewContorller和一个带有 3 个 tableviewcontrollers 的 tabbarcontroller。我需要在所有这 4 个视图控制器中发送和接收数据,因此我在 App Delegate 中实现了套接字流初始化。对于所有 3 个选项卡,我的 App Delegate 设置了,[self.inputstream setDelegate:self]但是当它位于其中时,DViewController它将输入流的委托设置为DViewController. 在(void)viewWillDisappearDViewController,我将输入流委托重置为 AppDelegate 的引用,以使其重新获得对输入流的控制。对于输出流,委托始终设置为 AppDelegate 并且从不更改。

myAppDelegateDViewControllerare<NSStreamDelegate>都实现:

实现了所有流事件案例。

所以基本上,我的整个设置运行良好,但前提是数据不快(或者就此而言,我似乎无法确定确切的问题)。

以下是我在测试时所做的一些观察(使用 Simulator-iPhone 和 iPhone-iPhone 设置):

A. 模拟器 - iPhone:

  1. 现在,在这个设置中,我能够以我希望它从模拟器发送到 iPhone 的方式快速发送数据,但不能从 iPhone 发送到模拟器。iPhone 可以很好地接收所有字符串并按要求操作。

  2. 从 iPhone 发送到模拟器,模拟器一次只能读取一个 JSON 字符串,当数据发送快时不起作用。如果发送快,那么模拟器接收到的所有字符串都是一半(只接收到一半)。注意:服务器接收和发送完整的字符串,所有字符串即使速度很快,服务器也没有问题。

  3. 如果我同时从模拟器和 iPhone 同时发送数据,即使速度很快,也能很好地接收和处理所有字符串。

B. 苹果手机 - 苹果手机:

  1. 任一 iPhone(其中任何一个发送,而不是同时发送)一次只能接收一个 JSON 字符串的数据,并且在快速发送数据时两者都不起作用。如果发送速度很快,那么任何一部 iPhone 接收到的所有字符串都是一半(只接收到一半)。注意:服务器接收和发送完整的字符串,所有字符串即使速度很快,服务器也没有问题。

  2. 如果我同时从两部 iPhone 相互发送数据,即使速度很快,也能很好地接收和处理所有字符串。

这些观察让我相信,只有当 iPhone 同时向服务器发送某些内容时,它才会接收所有快速字符串。或者我可能完全错了,因为当模拟器发送到 iPhone 时,iPhone 无论如何都能接收到所有内容。我想知道模拟器的不同之处在于从它接收的字符串被 iPhone 完整接收,而不是相反。是不是 iPhone 发送的速度比模拟器快,因此它发送的所有字符串都没有被接收方注册?请有人帮我破解这个!

注意:在所有情况下,服务器都能完美运行,无论速度如何,它都可以全长发送和接收数据。我正在使用 iOS 7。

更新1: 好的,所以整天都在试验它,我终于让它工作了。问题是,这正是我的问题陈述,如果你想连续快速地从输入流接收,输出流不能保持空闲。我不知道为什么会发生这种情况,如果有人可以启发我。所以我正在使用的快速修复是,每当我在输入流上获得字节时,我立即将空白数据发送到服务器以保持输出流处于活动状态。所以现在输入流可以快速读取完整的数据。但我觉得这是对服务器资源的浪费。另外,这不是一个可靠的解决方案。我正在寻找一个具体的解决方案。我想知道模拟器是如何做到的,而不用担心输出流的使用。有人可以帮忙吗?

更新 2: 从以前的更新中学习,这不是向服务器发送空白数据,但如果我想从他那里接收完整的下一个字符串,我需要向发送者发送虚拟数据。如果我想快速和完整地结束/接收数据,我需要使用虚拟/空白数据保持端到端通信。有人遇到过这个问题并找到了更好的可靠/具体的方法吗?