问题标签 [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 投票
0 回答
85 浏览

ios - iOS:如何将视频直接传输/流式传输到文件系统/专辑

所以我目前正在开发一个数据传输应用程序。我现在使用的方法是,我使用套接字传输文件,而我的问题专门针对视频文件。所以现在,我基本上将接收到的视频保存到内存中的临时文件中,然后从那里保存到文件系统(使用 UIImageWriteToSavedPhotosAlbum 方法的相册)。现在我的问题是,有没有一种好方法/方法可以将视频文件直接保存到相册中(从某种意义上说是流式传输)?我将不胜感激任何见解,尤其是任何此类事情的链接/示例。

谢谢!

0 投票
1 回答
173 浏览

ios - 使用 Multipeer Connectivity(Swift 2) 在目标 iPhone 中部分接收到来自发件人的音频文件

我已经从发送方 iPhone 打开了一个输出流,并在接收方 iPhone 中实现了一个输入(接收)流。我可以使用 Multipeer Connectivity 通过同一个 Wi-Fi 网络连接两个设备并发送数据(我将音频文件转换为 NSData 格式以通过 Outputstream 发送)。但是在接收时,我发送的只有部分 NSData收到。每次我重复运行代码时,都会收到不同数量的数据。这是输出流代码:

我的输入流代码是:

任何有关部分接收数据的原因以及随后更改代码以制定解决方案的任何帮助都将不胜感激。

0 投票
1 回答
233 浏览

cocoa - 在 Cocoa 中通过 TCP 发送大文件的最佳方式

我正在设计一种通过 TCP 数据包发送的协议,该协议有时可以在 iOS 和 OSX 设备之间发送大型(视频)文件。我有三个问题:

1) 为了获得良好的性能,每个 TCP 数据包的最大大小是多少?即:是接近 65535 并让 TCP 分解数据更好,还是尝试保持在某个阈值以下。如果是后者,那是什么?

2) 从文件中读取数据缓冲区并通过 TCP 套接字发送的最低开销方式是什么?与 Cocoa 中的常见情况一样,有多种方法: NSInputStream - NSFileHandle - POSIX 文件句柄

3) 将从 TCP 套接字接收的数据附加到文件的最低开销方式是什么?我们有: NSOutputStream - NSFileHandle - POSIX 文件句柄

我正在使用 GCDAsyncSocket 作为套接字。

谢谢!

0 投票
2 回答
155 浏览

objective-c - 使用 NSOutputStream 将当前时间输出到服务器

我正在使用 NSOutputStream 将数据从客户端(IOS 设备)输出到服务器(PC 设备)。我可以成功地将数据发送到服务器,我只想使用 NSOutputStream 添加当前时间。

如何使用 NSOutputStream 发送当前时间?

这是我的代码

0 投票
1 回答
351 浏览

objective-c - NSTimer doesn't work

Main problem

I'm implementing bandwidth management for Socket Rocket. To reduce amount of alteration in Socket Rocket I've decided to create subclass of NSOutputStream which will wrap NSOutputStream created for a socket. Concept is quite nice and should work like charm.

Encounter problem

In - (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len method I'm queering from bandwidth manager if data can be send or not. If not bandwidth manager gives me required delay for next write operation.

So my code looks more or less like this:

In logs I can see, (there is a run loop and it contains created timer):

Now I have a run loop my custom stream and wrapped stream are scheduled in this run loop, so socket rocket and my wrapping class are reciveing all notifications, so I've rule out all obvious mistakes.

Still for some mysterious reason notifyReadyToWrite: is never called. Does anyone have a clue why?

0 投票
1 回答
888 浏览

ios - 使用 NSOutputstream 和 NSInputstream 写入和读取每个间隔

我正在尝试使用 NSOutputstream 和 NSInputstream 来写入和读取每个间隔,比如 5 秒。这是为了以 P2P 方式与 Windows 上的 C# 程序进行通信。

我想使用 NSOutputstream 每 5 秒向 C# 程序发送一个请求,然后 NSInputstream 将读取 C# 程序的响应。

目前我有:

连接类将与 NSTimer 和 NSRunLoop 一起使用,如下所示:

第一次运行总是好的——我可以得到当前时间并正确显示。但随后的运行从未成功。输出流不能写出任何字节。并且输入流在读取时出现以下错误:

ErrorOccurred: Optional("Error Domain=NSPOSIXErrorDomain Code=32 \"Broken pipe\"")

我已经尝试搜索了很长时间,但找不到解决方案。任何帮助将非常感激。

0 投票
4 回答
13201 浏览

swift - 在 Swift 3 中将数据写入 NSOutputStream

这个问题的解决方案不再适用于 Swift 3。

不再有bytes(Data以前的NSData.

使用此代码,我得到错误:

你怎么能DataNSOutputStreamSwift 3 中写信?

0 投票
1 回答
760 浏览

objective-c - NSOutputStream 上的 hasSpaceAvailable 属性是什么意思?

我正试图围绕hasSpaceAvailableNSOutputStream 背后的逻辑。

在我的应用程序中,我通过由 NSInput/output 流管理的 CFSocket 发送大量数据(100MB),分成 4080 字节的块(硬限制)。

当我开始写入数据时,大约四分之一hasSpaceAvailable突然变成NO,所以我将数据添加到队列中。但是,如果我忽略这一点并尝试写入数据,则写入似乎可以作为write:maxLength:与 maxLength 参数(4080)匹配的返回值。

输出流有什么空间?据我所知,在使用 UNIX/Berkley 套接字时,没有可用于确定套接字是否可以写入的逻辑,您只需编写并确定是否所有数据都已写入。

该物业的文件指出:

一个布尔值,指示是否可以写入接收器。(只读)
YES如果可以写入接收器,或者是否必须尝试写入以确定是否有可用空间,NO否则。

在我看到 NO 的示例中,当我仍然可以写入该套接字时,是什么因素导致了这个结果。

0 投票
1 回答
361 浏览

ios - 在后台线程上执行工作后写入 NSOutputStream 不起作用

我有一个程序在一些初始处理后通过 NSStreams 发送大文件。应用程序的流程是这样的:

1) 两个设备相互连接,打开它们的输入和输出流,并安排它们的运行循环:

2) 服务器设备向客户端发送一条消息,表明一切顺利,我们都准备好了。客户端收到此消息就好了。

3) 客户端然后选择它想要发送到服务器的文件列表并点击“发送”。然后客户端启动一个后台线程来抓取一堆文件并将它们全部压缩。这可能需要一分钟左右的时间。

4) 对“sendFileWithItem:”的调用通过以下调用传递第一个信息突发:

以下所有数据都是通过调用发送数据来传输的- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)streamEvent

问题

我在这里看到的问题是,如果压缩这些文件的后台线程需要更长的时间,则写入数据的初始调用确实表明字节已写入流,但我从未收到任何对- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)streamEvent. 服务器从不接收信息。大约 30 秒后,写入命令(我假设?)超时,客户端收到一个空字符串(不是我从服务器明确发送的),客户端的连接关闭。

如果我发送一个压缩时间不长的文件,我看不到这个问题。

在主线程上运行所有内容 - 包括压缩过程 - 并不能解决问题(即使忽略它锁定 UI 的事实)。这似乎排除了线程是一个问题,但这是我现在必须要做的。

我完全没有想法,我希望有人能帮助我。

注意:考虑到这个建议,我不能使用 CocoaAsyncSockets 库。

0 投票
1 回答
55 浏览

ios - NSOutputStream 知道何时在另一端读取数据

我正在将麦克风中的音频从 iOS 设备实时发送到服务器。我遇到的问题:

当它因任何原因断开连接时,我实际上不知道在服务器中读取了多少数据。我希望这是一致的。如果 iOs 设备断开连接,它会继续在循环缓冲区中录制音频,直到它重新连接并再次开始发送音频。服务器停止录制后,要发送的下一个字节需要正好是后续字节。

这有意义吗?

谢谢