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

ios - 使用 NSOutputStream 通过套接字发送到服务器时用换行符分隔数据 (JSON)

我正在制作一个 TCP 协议,其中应用程序将 JSON 发送到服务器,然后将 JSON 发回。我正在尝试用换行符分隔每个传输。这在服务器端很好,但是如何为每个 NSOutputStream 写入添加换行符?

流设置正确,这是我用来发送数据的代码:

您如何\n在末尾添加换行符(),肯定有办法吗?

0 投票
1 回答
1115 浏览

ios - iOS 和 .NET 之间的套接字问题?

我有一个作为服务器运行的 .NET 桌面程序,我正在尝试在 iOS 中实现我的客户端程序的一个端口,但是我从 NSSocket 得到了一些奇怪的行为。这是来自服务器的相关代码。

我正在使用 XCode 4.2 并针对 iOS 5 在 iOSSimulator 中尝试以下代码。托管模拟器的 Mac 与服务器程序位于同一网络上,我可以运行使用相同硬编码本地 IP 的 Java 客户端,如下所示连接就好了。在 Objective C 代码中,我接收一些数据并将其存储在 NSData 成员属性中,然后一旦打开 Socket,我使用流回调告诉我何时尝试发送数据。

在 XCode 控制台中,我看到“Stream is open!”,然后是“Stream has space!”,然后是一个异常,显示“无法完成操作。错误的文件描述符”。之后我在我的服务器代码中放置了一个断点_tcpServer.AcceptSocket(),但它从未命中。似乎流打开了,但套接字从不连接?

0 投票
2 回答
711 浏览

iphone - iOS - 从服务器接收二进制数据仅在调试模式下工作

我有一个关于我上一篇文章的问题

但我认为首先我应该提供一些代码:

这是处理我创建的对象的函数

}

我在这里接收来自流的数据

}

这一切都适用于模拟器,或者如果我在 iPhone 上调试应用程序,但如果尝试在设备上运行它,我总是得到 BAD_EXCESS,因为 packetLength 的值是错误的,所以我尝试将太多字节读入我的缓冲。

现在我的问题是:为什么所有值在调试模式下都是正确的,但在运行模式下却完全搞砸了?有什么我可以避免这个问题或我应该注意的吗?

非常感谢您的帮助

这是我的 BytesToInt 函数,但如果接收到的值正确,我认为它可以正常工作

}

0 投票
1 回答
2092 浏览

stream - 将 CMSampleBufferRef 转换为视频

(对不起我的英语不好)

如何将 CMSampleBufferRef 转换/编码为视频以使用 NSOutputStream 发送?

我需要将视频从 ipad 流式传输到本地网络,我使用 AVFoundation 框架来获取视频。现在,我需要将此视频转换为正确的格式,以使用 NSOutputStream 发送到 Http Server。

如果我做错了什么,请告诉我

问候。

0 投票
1 回答
625 浏览

ios - NSStream - 反向 DNS 查找错误

我必须打开一个 NSStream 到一个只有数字地址而不是名称的 wifi 接入点。打开一个套接字需要 NSStream 30-40 秒。在实验中,我发现从 windows 框远程登录到 AP 是瞬时的,但在 mac 上,连接相同的 30-40 秒。在研究 telnet 时,我发现在 mac 上的实现有点不同,因为它默认尝试名称查找。阅读 telnet 的手册页,我发现: -N 当目标主机作为 IP 地址给出时,防止 IP 地址进行名称查找。

当我使用“telnet -N IP-address port”时,我的连接是瞬时的!我怀疑同样的问题导致我的 NSStream 连接延迟。有什么方法可以等效于在 NSStream 中设置“-N”标志?

0 投票
1 回答
559 浏览

ios - 由于流中的优化,值暂时不可用

我最近开始使用发布版本(管理方案并设置从调试到发布的运行)来测试我的应用程序。我注意到的是,有时我会在流方法中弹出以下错误,我似乎无法找到找到错误的方法。这在调试模式下完美运行,但在发布版本中,除了 SIGABRT 消息之外,我没有收到任何通知。我也不知道如何检查模拟器上的崩溃日志以查看问题所在。下面我附上了崩溃的堆栈跟踪:

来自流的案例声明:handleevent 发生崩溃的地方:

进程消息方法:

任何意见是极大的赞赏。

0 投票
1 回答
495 浏览

objective-c - 从 URL Objective C NSScanner 解析图像和扩展

我有一个程序将从我们的服务器中为应用程序抓取图像,但是我们想将图像保存到 iOS 应用程序中以进行缓存。

网址将与此类似。

我需要一种方法将图像名称(mypicture)和扩展名(.png)转换为 2 个不同的字符串以保存它。

我将如何使用 NSscanner 完成此任务?

谢谢

0 投票
1 回答
2008 浏览

ios - bytesWritten,但其他设备从未收到 NSStreamEventHasBytesAvailable 事件

我已经在 iPhone 和 Mac 之间建立了 Bonjour 网络。

用户在 Mac 中呈现的一个表格中选择 iPhone 的网络服务,并在两侧创建并打开一对流。

iPhone 首先向 Mac 发送一个代码(一个整数)。Mac 成功接收到它。

在暂停用户输入和处理后,Mac 开始向 iPhone 发送代码:

但是 iPhone 永远不会收到 NSStreamEventHasBytesAvailable 事件。在此之前我仔细检查过,iPhone 的 NSInputStream 上的 streamStatus 是 2,应该是 NSStreamStatusOpen。

有什么想法可能是错的吗?


更新:我进行了一个测试,其中 Mac 是第一个向 iPhone 发送整数的。同样,我从 Mac 的输出流中得到了 1 的 bytesWritten,但 iPhone 从未得到 NSStreamEventHasBytesAvailable 事件。

所以iPhone的输入流一定有问题。但我仔细检查了:

  • iPhone 的 self.streamIn 在 h 文件中正确键入为 NSInputStream
  • iPhone 收到 2 个 NSStreamEventOpenCompleted 事件,我检查了流 arg 的类。一个是KindOfClass:[NSOutputStream 类],另一个不是。
  • iPhone 永远不会收到 NSStreamEventEndEncountered、NSStreamEventErrorOccurred 或 NSStreamEventNone。
  • 如上所述,在 Mac 写入输出流之后,iPhone 的输入流状态为 2,NSStreamStatusOpen。

这是用于创建 iPhone 输入流的代码。它使用 CF 类型,因为它是在 C 风格的套接字回调函数中完成的:


更新2:响应阿拉斯泰尔评论的信息:

套接字选项

保留、释放和复制描述回调设置为 NULL。optionFlags 设置为acceptCallback。

套接字创建

这是用于在 iPhone 和 Mac 上设置套接字的方法,并附有我评论过的试图弄清楚此代码中实际发生的情况,该方法改编自各种教程和实验(有效):

运行循环调度

是的,所有 4 个流都安排在 runloop 中,都使用与我在上面第一次更新中发布的代码相同的代码。

运行循环阻塞:

我没有对同步、多线程、NSLock 等做任何花哨的事情。而且,如果我设置一个按钮操作以将某些内容打印到控制台,它会在整个过程中运行——runloop 似乎运行正常。


Update4,流端口?

Noa 的调试建议给了我进一步检查流属性的想法:

我曾假设流挂在它们的端口上,但令人惊讶的是,nTest它总是为空。它在我的应用程序中为空,这似乎表明存在问题 - 但在有效的教程应用程序中它也是空的。如果一个流一旦创建就不需要挂起它的端口分配,那么端口属性的目的是什么?

也许端口属性不能直接访问?但nTest在以下情况下也始终为空:

0 投票
0 回答
1982 浏览

objective-c - NSOutputStream 刷新

我想使用 Objective-C 中的 NSOutputStream 发送小包。

我有这个用户有同样的问题: Cocoa NSOutputStream send to a connection

答案是在字符串末尾添加“\n”。我试过了,但它不起作用。

你们中有人看到我的问题吗?编码可能是问题吗?

编辑:我通过从 NSNetservice-Object 调用此方法来获取输出流:

Edit2:问题是,如果我非常快地发送大量消息,服务器将消息作为一个字符串接收,而不是两个分开的

0 投票
1 回答
782 浏览

objective-c - 如何使用 CFSocket 修复幼稚的服务器实现以允许多个连接

从 2010 年冬天开始,我一直在研究 iTunes U 上斯坦福 CS193p 课程(iOS 编程)第 17 讲课中的 bonjour/NSStream 示例代码。示例代码可在此处获得。

简而言之,示例代码创建一个套接字并绑定到端口 0,以便为它提供一个空闲端口。NSNetService然后它使用(bonjour)发布具有该端口的服务。应用NSNetServiceBrowser程序启动时也会启动。可用的服务放在一个UITableView. 当一个cell被选中时,对应的service就被解析,一个anNSOutputStream被创建,就可以发送数据了。

这是一个幼稚的实现,因为如果连接已经存在,连接将被拒绝。我的问题是,处理多个连接的正确方法是什么?一旦多个客户端连接到服务器,服务器如何区分它们?即如何将数据专门发送给一个客户而不是其他客户?