问题标签 [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 回答
432 浏览

ios - NSOutputStream:如果流不完整,删除现有文件?

我正在使用 NSUrlConnection 和 NSOutputStream 来编写文件。但是当文件不存在或下载时出错时,我希望能够删除不完整的下载文件。

有这种操作吗?因为否则我会得到一个内容为 0 字节的文件......

0 投票
0 回答
2073 浏览

ios - NSInputStream 的 NSStreamEventHasBytesAvailable 永远不会被调用

我正在创建一个类似于 WiTap 的应用程序(但要连接许多设备),这是我的问题:应用程序似乎连接了设备(它们显示在表视图控制器中。代表NSInput/OutputStream说两个流都已打开,但是当我发送数据包时比NSOutputStream对面设备上的函数没有NSInputStream被调用(NSStreamEventHasBytesAvailible- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode)

这是进行连接以及发送和接收的代码......

我尝试使用 Instruments(网络事物)调试项目。它说数据包已发送和接收,但该事件从未发生。谢谢您的帮助。如果有人想要,我可以毫无问题地发送整个项目......

0 投票
0 回答
830 浏览

objective-c - iOS 中使用 NSOutputStream 的 FTPS

我正在尝试通过 SSL 在 FTP 上上传文件。我的代码适用于正常连接,但与 SSL 一起使用时,它会在以下方法中引发错误。错误是 NSStreamEventErrorOccurred。

我在iphone-ftps-client 的这个网站上查看了 soultion 。但是,答案是 FTPS 在 iOS [需要一个创建自己的库] 中没有内置支持,而另一个仅指向 FTP。

我的 FTP 服务器 [.crt] 上有证书,但由于我是新手,我无法理解该证书在客户端 [iOS] 上的用法。

任何人都可以在 FTPS 上帮助我,这将是一个很大的帮助。

0 投票
1 回答
2493 浏览

objective-c - 在第二个 NSOperation 尝试写入之后,NSOutputStream 总是在等待可用空间

我正在创建一个NSOutputStream并将其传递给一个NSOperation,我从一个调用它NSOperationQueue。在操作中,我正在轮询hasSpaceAvailable以便我可以写出到套接字。这在我第一次写入套接字时工作正常。然而,在操作返回后,我尝试再次写入套接字,写入永远不会完成,因为我无限地等待输出套接字中的空间可用。每次写入时我都尝试打开/关闭输出流,但遇到了同样的问题。

我在 init 函数中打开输出流(NSOutputStream从蓝牙创建EASession

我还在 init 中创建了操作队列:

我有一个文本字段,其中包含要通过输出流发送的数据。每次单击发送按钮时都会调用此函数:

这是我的操作代码的样子:(SenderOperation.h

( SenderOperation.m)

0 投票
1 回答
228 浏览

objective-c - 如何将数据写入流,直到来自服务器的所有数据都写入 NSOutputstream

如何将数据连续写入流并解析流,直到来自服务器的所有数据都写入 NSOutputstream

而且我也开始解析。但是 Stream:handleEvent 没有被调用用于流事件。如果流未获取总服务器响应数据并且还有更多数据要写入流,如何将数据写入流。如何来处理这个案子。

0 投票
1 回答
1087 浏览

ios - NSInputStream 和 NSOutputStream 问题

我有两个NSInputStreamNSOutputStream之间通过网络相互连接的设备。当我在 中写入内容时output stream,数据会一直写入,直到 NSStreamEventEndEncountered事件发生。我关闭了输出流,但在另一边(input streamNSStreamEventEndEncountered事件永远不会发生,直到我退出output stream. 所以:
1. 为什么即使在相同的NSStreamEventEndEncountered事件发生在之后,事件也没有发生?(在这个事件中甚至关闭了输出流) 2. 据我了解,一旦打开,您只能写入一次数据。不可能在事件后再次打开(例如在任何事件上写一些新的东西),对吗????input streamoutput stream
NSOutputStreamoutput streamNSStreamEventEndEncountered

0 投票
3 回答
632 浏览

ios - 通过 NSInputStream/NSOutputStream 传输多个图像

我有两个NSInputStreamNSOutputStream通过网络相互连接。我想将核心数据对象和相关图像从一台设备传输到另一台设备。我已成功将核心数据对象转换为JSON并传输到流的另一端,然后从JSON. 现在有与每个记录相关联的图像。图像在光盘上,只有路径存储在核心数据对象中。现在,当您写入output stream. 我已经准备好了XML(包含JSON)。
1. 但是如何将图像 ( NSData *) 与XML(also NSData *) 一起传输?我将如何在阅读端 ( NSInputStream) 区分 XML 和图像?
2.另外,我要传输多张图片,最后我们如何判断NSInputStream一张图片的字节已经完成,下一张图片的字节已经开始?
3.我们怎么知道哪个图像(名称)被转移了?
谢谢

0 投票
1 回答
851 浏览

objective-c - CFStreamCreateBoundPair 正在将 4kb 数据写入流,流将解析包含 xml 起始节点且不包含结束节点的数据

CFStreamCreateBoundPair 正在将 4kb 数据写入流,流将解析包含 xml 起始节点且不包含结束节点的数据。如何编写代码和管理代码,以便我们将正确的 xml 数据写入 nsoutputstream。

CFStreamCreateBoundPair(NULL, (CFReadStreamRef *)&iStream, (CFWriteStreamRef *)&oStream,4096);

0 投票
0 回答
317 浏览

ios - iOS 使用 AFNetworking 停止下载大文件

我正在使用 AFNetworking 下载一个大型视频文件,它似乎停止在 170MB 左右,而没有调用超时或引发任何其他类型的错误。

我已将 AFURLConnectionOperation 子类化以流式传输数据,并使用 NSOutputStream 将数据直接写入文件。

[url连接开始];

该文件本身约为 370MB。有人有想法么?

提前致谢

0 投票
1 回答
1764 浏览

ios - iOS:将 .jpg 图像作为 base64 发送到 tcp 服务器

这个要杀了我。除了这个愚蠢的问题外,我已经很接近完成这项工作了。而且我不确定我是否能够充分描述这个问题,但我会尝试。

我的企业应用程序使用 iPhone 相机拍摄我们的现场人员购买的收据。我使用了一个非常酷的 API 将 jpeg 数据转换为 base 64 ( https://github.com/nicklockwood/Base64 ) 以通过 TCP 连接发送到 VB 2010 服务器,该服务器将其读取为文本字符串并将其转换回一个二进制文件。

base64文件创建的时候,先保存到手机磁盘,因为可能图片比较多。然后当准备好发送时,该进程将读取每个 base64 文件并一次发送一个。

base64 函数创建的文本字符串非常大,起初它只发送大约 131,000 个字节,这很容易转换回二进制,但会渲染大约 1/4 到 1/3 的图像。我只是认为数据被截断了,因为该应用程序试图超越自己。

然后我找到了一个很好的片段,它向我展示了如何使用 NSStreamEventHasSpaceAvailable 事件将 base64 字符串拆分为几个块并按顺序发送它们。(http://www.ios-developer.net/iphone-ipad-programmer/development/tcpip/tcp-client)就发送完整文件而言,它的效果很好 - 也就是说,服务器接收到的结果文件是正确的大小,与发送前的base64文件相同。

这里的问题是,在某些时候,服务器接收到的文件已损坏,因为它似乎从文件的开头重新开始......换句话说,数据开始自我重复。

奇怪的是,重复部分每次都从接收文件中完全相同的位置开始:位置 131016。它不会在文件末尾开始重复,它只是在该点中断文件并跳回到开始。碰巧这是在我开始使用 HasSpaceAvailable 事件之前发送的文件的大小。我无法弄清楚值 131,016 的意义是什么。某处的最大缓冲区大小?

使用各种 NSLogs 和断点,我几乎可以确定数据以这种方式离开手机,而不是被服务器打乱。我还写了一个 NSMailComposeViewer 方法,该方法会将 base64 文件作为附件通过电子邮件发送给我,并且它完美地通过了。

以下是从磁盘读取文件并发送到服务器的代码:

然后是使用 HasSpaceAvailable 事件的代码:

(我特别喜欢这段代码,因为它允许在屏幕上放置 ProgressView 控件。)

网络流事件处理程序代码位于根视图控制器中,但 base64 中的图像数据是从另一个视图控制器发送的。我的直觉告诉我,这不是问题,因为到目前为止它工作得很好,但是字符串要短得多。

现在,还有另一个可能相关的问题——而且很可能是相关的。除非我关闭应用程序,否则我似乎无法完成数据传输。我猜,在连接关闭之前,服务器不会看到它。我曾尝试将 [outputStream close] 放在代码中的各个位置,但无济于事。我还尝试使用换行符或回车符或两者兼有来终止 base64 字符串。

服务器被编程为在看到正确的字节数时保存文件,但在应用程序关闭之前不会发生这种情况。通过在服务器上使用 WireShark,我知道正在接收一些数据,但正如我所说,其余数据在应用程序关闭之前不会到达。

我怀疑最后一部分(完成转移)是问题,但对于我的生活,我在网上找不到任何解决这个问题的东西,除非我太无知,不知道要使用什么搜索词......这很有可能。

我希望我已经提供了足够的信息。谁能帮我?