问题标签 [nsstream]

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 回答
2482 浏览

iphone - 使用 NSInputStream/NSOutputStream 通过 TCP (iPhone) 进行通信

是否可以在 iPhone 上使用 NSInputStream/NSOutputStream 进行 TCP 通信?苹果在其文档中提供的示例使用 [NSStream getStreamsToHost] 并且 iPhone 不支持该示例。我看过其他使用 CFStream 设置套接字然后桥接到 NSStream 的帖子,这是唯一受支持的方式吗?

根据文档,理论上应该是这样的:

但是,这样做有两个问题:

1)如果我只做 iStream 部分,我永远不会看到我的委托调用任何事件。

2) outputStreamWithURL 失败并显示来自 CFWriteStreamSetProperty 的神秘“EXC_BAD_ACCESS”错误消息

0 投票
2 回答
3692 浏览

objective-c - scheduleInRunLoop - 线程化网络连接

我还没有找到任何体面的文档来解释 NSStream 的线程处理过程。具体来说,让我们使用 NSInputStream。Objective-C 中的线程对我来说目前是一个谜,因为它看起来很简单。

我的问题主要是指这一行:

您可以指定输入流将在其中运行的运行循环,我认为这很酷。问题是,如果我希望输入和输出流在它们自己的线程中运行,并且两者都在一个类中实例化,比如 Connection,那么你如何让它们在它们自己的线程中运行?

我问的原因是因为代表。以前我们会这样做[inputStream setDelegate:self],这意味着我们必须声明stream:handleEvent处理传入/传出数据。

所以最终我的问题是,如果你有一个设置输入和输出流的类,你如何将每个流线程化并将处理流事件的责任委托给当前类?

这里有一些代码可供选择:

我在想以下几点:

  • 您不能将责任委派给当前类中的两个线程,您必须委派给单独的对象。
  • 一个线程可以同时处理两个流?(我个人不这么认为,因为输入/输出会同时运行)
  • 我想错了,您可以创建一个单独的运行循环并针对某个单独的线程调用 scheduleRunLoop 吗?

有任何想法吗?

0 投票
1 回答
3061 浏览

ios - 我如何等待 NSStream 打开或失败?

目前,当我打开一个 NSInputStream(例如)时,我可以将其设置为获取一个指示它已完全打开的事件。但如果失败,则根本没有任何事件。我从来没有被告知开幕未能完成。我可以在它试图打开时进行轮询,但是我必须在很长一段时间内占用一个线程。

我想做的是编写高效的代码来等待流打开或打开失败。有没有使用 NSStream 等的方法?

我还想创建一个可以等待一段时间的事件。如果连接成功,该事件将发出信号并将我弹出等待状态。如果发生超时,我可以测试状态并查看它是否失败或再次回到等待状态。但这当然是 B 计划,既不雄辩也不高效。并且查看 CocoaTouch 文档并不清楚如何创建这样一个我可以等待超时的信号。

任何帮助,将不胜感激。

0 投票
1 回答
859 浏览

objective-c - NSJSON序列化错误

我正在尝试将 json 对象发送到服务器。但我收到一个错误,我无法修复它。

这是我与主机的连接。

而这部分是 NSJSONSerialization 部分。但是我得到了一个错误。

我是objective-c的新手。我无法在 3 小时内解决问题。

========================================

编辑:

这是我的流:handleEvent:函数。

现在,在我将 connectionToHost 添加到委托之后,我得到了这种错误。

现在我不知道它是否缓冲

=======================EDIT2=============== 对不起。问题可能是因为这个

我只是复制并粘贴这部分代码。可能是什么问题!

0 投票
1 回答
529 浏览

objective-c - NSStreamStatus 手动更改

有什么方法可以手动更改streamStatus

0 投票
1 回答
2858 浏览

objective-c - 如何在 NSStream 中使用委托?

我是Objective-C的新手。我正在尝试学习如何使用NSStream. 我只是使用了 Apple 支持的简单代码。此代码应从我的桌面中的文件打开一个流,并在 iStream 调用委托时显示一条简单消息。在代码的最后,我可以看到状态是正确的,但委托永远不会被调用。我错过了什么?

0 投票
2 回答
116 浏览

objective-c - 在 tabBarView 中管理套接字流

我正在使用 UITabBarController 开发一个应用程序。更具体地说,使用故事板。我希望我的所有选项卡都能够从服务器发送和接收数据。

问题是我不知道怎么做。只有具有 initNetworkCommunications 的第一个选项卡能够从服务器发送和接收。那么我应该怎么做才能让我的应用程序能够从其他选项卡发送和接收?

我发现使用 NSNotificationCentre 来处理数据会起作用,但还有其他方法吗?

这是创建套接字连接的代码

假设我有 2 个标签。第一个选项卡有一个连接按钮,用于调用 initNetworkCommunication。从这个选项卡我可以发送和接收数据。但是我如何处理另一个选项卡?有没有办法链接这个连接?

我尝试导入彼此的控制器并使用 [FirstController sendMessage];从 secondViewController 但似乎不起作用。

0 投票
1 回答
617 浏览

objective-c - Scheduling NSStream events on an NSRunLoop that isn't the main run loop

I'm scheduling events on the main run loop using the following code:

I assume that this means that NSStreamDelegate events are being scheduled on the main run loop and therefore can potentially impact UI responsiveness if frequent enough. This certainly seems to be the case in my program - even if the event handlers detach into a background thread without doing much work themselves.

How would I go about scheduling on a run loop other than mainRunLoop? Do I need to create a thread? Can I just create an NSRunLoop directly? What setup needs to be performed?

0 投票
1 回答
1167 浏览

ios - 后台线程上的 iOS 网络导致应用程序挂起

我有一个为网络消息创建后台线程的应用程序。除非它连接到的服务器关闭连接,否则该应用程序几乎可以完美运行。我不确定为什么会发生这种情况,但非常感谢任何建议。我已经包含了可以解决问题的代码片段。如果某些内容含糊不清或需要更多细节,请告诉我。

挂断发生在返回 networkThread 线上。执行该行后,应用程序似乎挂起并冻结,我无法确定原因。

提前致谢。

编辑

这是 CloseThread 的代码片段,供感兴趣的人使用

0 投票
2 回答
1360 浏览

ios - 如何使用 NSStreamEventOpenCompleted 回调 NSStreamDelegate?

我一直在研究NSStreamDelegate,我已经实现了回调,我已经初始化了输入和输出流,就像这样......

即使在打开两个流之后,callback(stream:(NSStream *)theStream handleEvent:)也不会NSStreamEventOpenCompleted为两个流调用流。谁能帮助我我在这里做错了什么。或者什么是NSStreamEventOpenCompleted不会被调用的可能性,我在文档中看到,如果打开失败它不会调用这个,如果是这样,为什么打开流失败。任何想法?

谢谢你的帮助。