Tag: nsinputstream

只有输出stream同时发送,iOSinputstream才能接收快速数据

我的iOS应用需要套接字通信。 我正在关注这个 Ray Wenderlich教程来设置input和输出stream。 我正在使用的服务器是Twisted。 我的应用程序需要发送和接收由陀螺仪数据等外部事件产生的快速爆发数据。 它是以JSONstring的forms发送/接收数据。 很大程度上,这就像一个实时消息聊天应用程序,但发送和接收速度非常快,爆发。 所以我的应用程序布局是,我有1视图控制器: DViewContorller和一个tabbarcontroller与3个tableviewcontrollers。 我需要在所有这4个视图控制器中发送和接收数据,因此我在App Delegate中实现了套接字stream初始化。 对于所有3个选项卡,我的App Delegate设置[self.inputstream setDelegate:self]但是当它在DViewController它将inputstream的委托设置为DViewController的引用。 在DViewController (void)viewWillDisappear中,我将inputstream委托重置为AppDelegate的引用,以使其重新获得对inputstream的控制权。 对于outputstream,委托始终设置为AppDelegate并且永远不会更改。 我的AppDelegate和DViewController都是<NSStreamDelegate> ,它们都实现了: – (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent} { } 所有的stream事件实施。 所以基本上,我的整个设置运行良好,但只有数据不是很快(或者说,我似乎无法查明确切的问题)。 所以这里有一些我在testing时所做的观察(使用Simulator-iPhone和iPhone-iPhone设置): A.模拟器 – iPHONE: 现在在这个设置中,我能够快速,准确地发送数据,从Simulator发送到iPhone,而不是从iPhone发送到Simulator。 iPhone收到所有的string,并按照要求行事。 从iPhone发送到模拟器,模拟器一次只能读取一个JSONstring的数据,并且在数据发送快时不起作用。 如果发送速度快,则模拟器接收到的所有string都是一半(仅接收到一半)。 注意:服务器接收和发送完整的string,即使速度很快,所有的string也没有问题。 如果我同时发送数据,同时从模拟器和iPhone发送数据,即使速度很快,也能很好地接收和处理所有的string。 B. iPHONE – iPHONE: 任何一个iPhone(任何一个发送,不能同时发送)一次只能接收一个JSONstring的数据,并且在数据快速发送时都不工作。 如果发送速度很快,那么任何iPhone收到的所有string都是一半(仅接收到一半)。 注意:服务器接收和发送完整的string,即使速度很快,所有的string也没有问题。 如果我同时发送数据,同时从两个iPhones到彼此,即使快速,都收到和处理好所有的string。 这些观察使我相信,只有当iPhone正在同时向服务器发送某些东西时,iPhone才能接收到所有快速string。 或者我可能是完全错误的,因为当模拟器发送到iPhone时,iPhone无论如何都能接收到一切。 我想知道模拟器做了什么不同,从iPhone收到的string是由iPhone完全采取,而不是相反。 iPhone的发送方式是否比模拟器的发送速度快,因此所有发送的string都不会被接收器注册? 有人帮我破解这个请! 注意:在任何情况下,服务器都能正常工作,无论速度如何,它都可以全速发送和接收数据。 我正在使用iOS 7。 更新1:好吧,一整天都在试验,我终于做到了。 […]

我无法初始化一个NSInputStream

请帮助我,即时疯狂。 我需要创build一个NSInputStream所以我可以通过wifi从相机读取实时预览。 liveViewStream是一个NSInputStream -Instance-Variable,在我的实现中声明如下: @implementation MKSonyCamHandler{ NSInputStream *liveViewStream; } liveViewURL是一个有效的URL,当我连接到摄像机的networking时,我可以在浏览器中打开它(尽pipe我不认为这有什么区别)。 我已经检查了它的存在,不是零,并保持我期望的价值。 但是当我这样做: liveViewStream = [[NSInputStream alloc] initWithURL:liveViewURL]; DLog(@"%@", liveViewStream); alloc-init命令后面的DLog每次都会logging“(null)”,如果我知道原因的话,那么该死的就不该说了。 有没有人遇到过这个? 我在这里丢失了明显的东西吗? 这是我第一次与NSStreams ,有没有一个常见的陷阱可能是原因? 该文档明确指出,-initWithURL: Creates and returns an initialized NSInputStream object that reads data from the file at a given URL. 有任何想法吗? 我开始觉得这里真的很愚蠢。 编辑:我正在使用ARC。

在stream式传输数据的几秒钟内,RN42蓝牙会断开连接

我一直试图通过蓝牙2.1使用RN-42从设备读取数据。 该设备与iPhone或iPad Mini配对,数据瞬间stream过,但iOS和BT模块在几秒钟内断开(不成对)。 该设备正在输出数据5-10kB / s,在蓝牙的规范内。 我还注意到,当我运行函数NSInputStream,[NSInputStream read:maxLength:],返回的字节数始终是158或更less。 应用程序和硬件不会崩溃,但蓝牙只是不配对。 即使在断开连接之后,设备仍然向RN42发送数据,这减less了在电子设备方面出现问题的可能性。 这个设置在Android设备上也可以很好地工作。 我可以stream数据没有任何断开或崩溃。 我试过的东西… 接下来是Apple提供的外部附件示例EADemo。 纯粹使用运行循环而不是轮询。 按照这篇文章的build议把stream放到后台线程上。 删除所有NSLogs来帮助提高性能。 以debugging和发布模式编译。 有一件事是减慢数据传输速度(即低于5kB / s),这样iOS和BT模块就可以在断开连接之前保持连接和传输数据。 #define EAD_INPUT_BUFFER_SIZE 1024 /** * Stream delegate */ – (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { switch (eventCode) { [… other cases …] case NSStreamEventHasBytesAvailable: { uint8_t buf[EAD_INPUT_BUFFER_SIZE]; unsigned int len = 0; len = [(NSInputStream *)aStream […]

使用iOS8中的NSUrlSession使用stream请求进行背景上传

之前在iOS7中,当我们尝试在后台使用stream请求上传时,我们得到以下exception 终止应用程序,由于未捕获的exception'NSGenericException',原因:'在后台会话中上传任务必须来自文件' 但是在iOS8中,我们尝试在后台使用stream上传时没有出现exception。 现在我的问题是 1)是不是上传与uploadTaskWithStreamedRequest:允许在iOS8? 2)在iOS8中,我使用了带有uploadTaskWithStreamedRequest的后台NSURLConfiguration。 我正在使用– (void)URLSession:(NSURLSession *)会话任务:(NSURLSessionTask *)任务needNewBodyStream:(void(^)(NSInputStream *))completionHandler提供stream到NSUrlSession。 当应用程序在前台它工作正常,上传我的文件到服务器。 但是一旦应用程序在后台启动,stream将结束,并且NSURLSession完成,并显示以下错误消息 错误域= NSURLErrorDomain代码= -997“丢失连接到后台传输服务” 我认为当应用程序在后台我的stream结束。 现在我的问题是,我应该在哪些runloop我应该安排我的stream,或让我知道如果我的理解有任何错误。 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task needNewBodyStream:(void (^)(NSInputStream *))completionHandler { // Open producer/consumer streams. We open the producerStream straight // away. We leave the consumerStream alone; NSURLConnection will deal // with it. NSLog(@"%@", [NSThread currentThread]); NSInputStream *consStream; NSOutputStream *prodStream; […]

使用NSInputStreamstream式传输NSXMLParser

更新: 当使用NSXMLParser类的方法initWithContentsOfURL ,而不是下载XML feed时parsing,它似乎尝试将整个XML文件加载到内存中,然后才启动parsing过程。 如果XML提要很大(使用过量的RAM,本质上是低效的,因为不是与下载并行parsing,只在下载完成后才开始parsing等),这是有问题的。 有没有人发现如何parsing,因为饲料正在使用NSXMLParserstream式传输到设备? 是的,您可以使用LibXML2 (如下所述),但似乎应该可以使用NSXMLParser来完成。 但它躲过了我。 原始问题: 我正在使用NSXMLParser从networkingstream中读取XML。 如果使用initWithContentsOfURL ,而接口可能会导致人们推断它将从Webstream式传输XML,但似乎并不这样做,而似乎是在任何分析发生之前尝试加载整个XML文件。 对于大小适中的XML文件来说很好,但对于真正大的XML文件来说,这是有问题的。 我已经看到使用NSXMLParser与initWithStream一起使用一些自定义的NSInputStream从networkingstream的讨论。 例如,有一些答案build议使用类似于下面的Cocoa Builder中提到的CFStreamCreateBoundPair和Apple Stream编程指南中的设置套接字stream的讨论,但是我还没有得到它的工作。 我甚至尝试编写自己的使用NSURLConnection的子类NSInputStream (这本身就非常适合stream式传输),但是我无法将它与NSXMLParser结合使用。 最后,我决定使用LibXML2而不是NSXMLParser ,正如Apple XMLPerformance示例中所演示的那样 ,但是我想知道是否有人从使用NSXMLParser的Web源获取stream媒体。 我已经看到了很多“理论上你可以做x ”的答案,从CFStreamCreateBoundPair到从NSURLRequest抓取HTTPBodyStream所有内容,但是我还没有碰到用NSXMLParser进行stream式处理的演示。 Ray Wenderlich的文章如何select最适合您的iPhone项目的XMLparsing器似乎证实NSXMLParser并不适合大型的XML文件,但是所有关于可能的基于NSXMLParser的解决scheme的文章都是针对真正大型的XML文件进行stream式处理的,我很惊讶,我还没有find这个工作示范。 有谁知道一个正常运行的NSXMLParser实现从networkingstream? 显然,我可以坚持使用LibXML2或其他一些等效的XMLparsing器,但是使用NSXMLParser进行stream式处理的概念看起来似乎非常接近。

NSInputStream停止运行,有时会抛出EXC_BAD_ACCESS

(更新)这是一个简单的问题:在iOS我想读一个大文件,做一些处理(在这种情况下编码为Base64string()并保存到设备上的临时文件。一个NSInputStream从文件中读取,然后进入 (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode 我正在做大部分的工作。 出于某种原因,有时我可以看到NSInputStream停止工作。 我知道,因为我有一条线 NSLog(@"stream %@ got event %x", stream, (unsigned)eventCode); 在(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode的开始(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode ,有时我会看到输出 stream <__NSCFInputStream: 0x1f020b00> got event 2 (对应事件NSStreamEventHasBytesAvailable),然后什么也没有。 不是事件10,它对应于NSStreamEventEndEncountered,不是一个错误事件,什么都没有! 有时候我甚至会得到一个EXC_BAD_ACCESSexception,我现在还不知道如何debugging。 任何帮助,将不胜感激。 这是实施。 当我点击一个“提交”button时,一切都开始了,这会触发: – (IBAction)submit:(id)sender { [p_spinner startAnimating]; [self performSelector: @selector(sendData) withObject: nil afterDelay: 0]; } 这里是sendData: -(void)sendData{ … _tempFilePath = … ; [[NSFileManager defaultManager] createFileAtPath:_tempFilePath […]