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

ios - iOS 模拟器输出流的发送方式与 iPhone 的输出流不同

我的 iOS 应用程序需要套接字通信。我正在关注这个Ray Wenderlich 教程来设置输入和输出流。我使用的服务器是 Twisted。我的应用程序需要发送和接收由外部事件(如陀螺仪数据)生成的快速数据突发。它以 JSON 字符串的形式发送/接收数据。所以在很大程度上,它非常像一个实时消息聊天应用程序,但发送和接收速度非常快并且是突发的。

现在我知道流不会发送消息,而是一个接一个地发送附加的所有内容。但是我在非常快地发送数据时观察到了这件事。模拟器的输出流,即使它非常快地向 iPhone 发送数据或不向 iPhone 发送数据,在任何情况下,都会以消息方式发送数据。服务器接收每个发送命令作为单个消息。与运行相同代码的 iPhone 不同,当它必须快速发送数据时,它会像流一样发送所有消息,一个接一个地附加。

此外,当模拟器快速发送消息时,接收 iPhone 会收到所有消息并完成消息。但是,当 iPhone 向模拟器或另一台 iPhone 发送快速消息时,它们都会收到不完整/损坏的消息,即使服务器上的代码在发送之前将流附加消息分开(我已经验证过)。

谁能解释我出了什么问题,在哪里?我希望我的应用程序不仅能从模拟器接收到来自另一部 iPhone 的快速且完整的消息。

是我发布的原始问题,以防有人对细节感兴趣。

0 投票
1 回答
733 浏览

ios - EXC_BREAKPOINT 随机使用 NSOutputStream

我正在编写一个使用 NSOutputStream 的应用程序。我像这样初始化连接:

然后根据 NSStreamDelegate 方法做一些动作。关闭连接通过以下方式完成:

有时(它是随机的)我得到 EXC_BREAKPOINT 并且应用程序崩溃。这是崩溃日志的一部分:

异常类型:EXC_BREAKPOINT (SIGTRAP) 异常代码:0x0000000000000001、0x000000000000defe 由线程触发:5

线程 5 名称:调度队列:com.apple.root.default-qos

线程 5 崩溃:

0 核心基础 0x22767e22 CFHash + 130

1 核心基础 0x22768d70 CFBasicHashGetCountOfKey + 1152

2 核心基础 0x227688aa CFSetContainsValue + 98

3 核心基础 0x2279ca5a CFRunLoopRemoveSource + 226

4 CFNetwork 0x22343eca SocketStream::write(__CFWriteStream*, unsigned char const*, long, CFStreamError*) + 426

5 CFNetwork 0x223480c2 WriteStreamCallbacks::_write(__CFWriteStream*, unsigned char const*, long, CFStreamError*, void*) + 34

6 核心基础 0x2278d7ec CFWriteStreamWrite + 356

7 应用程序 0x000a0190-[AppMenuViewController sendVersion] (AppMenuViewController.m:763)

8 应用程序 0x000a0c68-[AppMenuViewController sendVersionOrWait] (AppMenuViewController.m:832)

9 基础 0x235655e4 __NSFireDelayedPerform + 464

10 核心基础 0x22828734 CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 12

11 核心基础 0x228282b4 __CFRunLoopDoTimer + 652

12 核心基础 0x2282651e __CFRunLoopRun + 1414

13 核心基础 0x22773dac CFRunLoopRunSpecific + 472

14 核心基础 0x22773bbe CFRunLoopRunInMode + 102

15 基础 0x234ab16c -[NSRunLoop(NSRunLoop) 运行模式:beforeDate:] + 260

16 基础 0x234f95e0 -[NSRunLoop(NSRunLoop) 运行] + 76

17 应用程序 0x0009feaa-[AppMenuViewController initConnection:withPort:] (AppMenuViewController.m:749)

18 应用程序 0x000a1642-[AppMenuViewController 流:handleEvent:](AppMenuViewController.m:952)

19 核心基础 0x227d9b94 _signalEventSync + 144

20 核心基础 0x227e3ef2 _cfstream_solo_signalEventSync + 198

21 核心基础 0x227d981e _CFStreamSignalEvent + 322

22 CFNetwork 0x222b7bd4 SocketStream::dispatchSignalFromSocketCallbackUnlocked(SocketStreamSignalHolder*) + 36

23 CFNetwork 0x222b78be SocketStream::socketCallback(__CFSocket*, unsigned long, __CFData const*, void const*) + 146

24 CFNetwork 0x222b77f2 SocketStream::_SocketCallBack_stream(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 54

25 核心基础 0x2282b0bc __CFSocketPerformV0 + 552

26 核心基础 0x22828804 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 12

27 核心基础 0x22827c16 __CFRunLoopDoSources0 + 218

28 核心基础 0x22826294 __CFRunLoopRun + 764

29 核心基础 0x22773dac CFRunLoopRunSpecific + 472

30 核心基础 0x22773bbe CFRunLoopRunInMode + 102

31 基础 0x234ab16c -[NSRunLoop(NSRunLoop) 运行模式:beforeDate:] + 260

32 基础 0x234f95e0 -[NSRunLoop(NSRunLoop) 运行] + 76

33 应用程序 0x0009feaa-[AppMenuViewController initConnection:withPort:] (AppMenuViewController.m:749)

34 应用程序 0x0009b664 __58-[AppMenuViewController alertView:clickedButtonAtIndex:]_block_invoke (AppMenuViewController.m:385)

35 libdispatch.dylib 0x30521610 _dispatch_call_block_and_release + 8

36 libdispatch.dylib 0x3052d350 _dispatch_root_queue_drain + 816

37 libdispatch.dylib 0x3052e27a _dispatch_worker_thread3 + 102

38 libsystem_pthread.dylib 0x3069ee22 _pthread_wqthread + 666

39 libsystem_pthread.dylib 0x3069eb74 start_wqthread + 4

我想这可能是由网络问题引起的,因为它出现在我的 WIFI 路由器没有 Internet 连接时。但我不确定,也不知道如何消除此错误。请帮忙 :)

0 投票
1 回答
1232 浏览

ios - 可以获取 NSInputStream 数据并播放视频

我正在使用 NSSInputStream 和 NSOutputStream 发送和接收数据,在服务器中(我命名它):打开流向客户端发送数据

在 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode

在客户端,如何接收数据和播放视频?,谢谢

0 投票
1 回答
1342 浏览

ios - What's the advantages of using NSOutputstream?

I need to download large files from the Internet , and save it to local disk.

At first, i save the data like this:

As AFNetworking use NSOutputstream to save data to local like this:

What are the advantages to use NSOutputstream than NSFileHandle when writing a file ?

What are the advantages in terms of performance ?

0 投票
1 回答
125 浏览

ios - 无法调配 NSOutputStream 的 write:MaxLength:

在实际写入 NSOutputStream 之前,我需要编写自定义数据。

为了让 swizzling 代码执行,我创建了一个类别 NSOutputStream(SwizzleWrite),它包含以下内容:

然后我创建 Inout & 输出流: CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, hostRef, 80, &readStream, &writeStream);

但是现在当控件到达handleEvent:delegate时,具体在:[outputStream write:rawstring maxLength:sizeof(rawstring)]; ,我在 swizzledWrite:maxLength 上没有得到它:

我在这里做错了什么?

PS:我已经读到 swizzling Apple 方法对 Appstore 不友好,但我也读过它们被接受的案例。

0 投票
1 回答
893 浏览

ios - 在 NSRunLoop 上调度流

我一直在关注本教程http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server并且一切正常好的,但是文本中有一行我不明白:

我们的流必须不断准备好发送或接收数据。为了实现这一点,我们必须安排流在运行循环中接收事件。如果我们不分配运行循环,委托将阻止我们代码的执行,直到流上没有数据可读取或写入,这是我们想要避免的情况。

但是,如果我在代码中注释这些行:

一切都会正常工作。我真的不明白为什么我必须在主运行循环上安排这个?

正如我所看到的,主线程上发生的所有事情都在这个运行循环中处理。因此,如果我按下按钮,它将在主运行循环中处理。在这里,如果我没有在主运行循环上安排这个,字节仍然会被接收和发送,所以对我来说这意味着它们是在主运行循环上处理的。

0 投票
1 回答
79 浏览

ios - 无法强制取消 ftp 下载

我正在使用SimpleFTPSample从 FTP 服务器下载和上传。无论是否完成,我都必须在特定时间后取消下载并开始上传。但是如果我取消下载然后开始上传委托方法stream:handleEvent:就不会被调用。如果在下载完成后开始上传,则会调用委托方法。

我无法理解原因。我正在为这两个任务创建单独的连接。

由于我们需要调度runloop来处理网络流,而当我们强行取消下载时,runloop没有退出,这是这个原因吗?

我是否需要在单独的线程中启动这两个操作,以便在特定时间后开始上传?

0 投票
1 回答
665 浏览

ios - 使用 NSOutputStream 发送字节数组

我必须将 8 字节数组发送到 IP 我的数据为 NSMutableArray 包含 0 到 255 之间的整数值据我所知,我必须在发送之前将其转换为 nsdata。

我正在使用这种方式,但它给了我超过 8 个字节的 NSdata 对象

任何帮助将不胜感激

0 投票
1 回答
468 浏览

android - ios 套接字输出流字节

我在网站上找到这些代码,并将其重写为我现在的代码,我可以成功连接到服务器端。但我仍然遇到一些问题:

输出流:

根据网站上的代码,我可以正常发送字符串

但我想发送字节,(例如0x80,0x10,0x20...等)Android语法是:

但是换了ios,不知道怎么办?给我一些建议或网站,感激不尽。

0 投票
2 回答
2207 浏览

sockets - 如何在 swift 中显式地从 NSInputStream 读取数据?

我在我的应用程序中使用套接字连接。

这是我的SocketConnection.swift

在我的ViewController.swift,我像这样连接到服务器

现在我可以通过套接字发送我的 url 字符串,但是当我明确阅读时,如果我从NSStreamEvent.HasBytesAvailable打印服务器响应的情况下调用相同的读取函数,我不会从服务器获取数据。但是如何触发事件队列?

我想socketConnection.read()明确地调用它。我该怎么做?

连接 2 秒后,它关闭连接通道,我想保持连接直到我关闭。

帮我解决这个问题。

谢谢