- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 NSStream
编写包装器之类的东西,以使我的生活更轻松。我只想知道什么时候建立连接,什么时候关闭,写一些数据获取接收到的数据。所以我在想这样的事情:
标题:
@interface StreamWrapper : NSObject
- (id)initWithDelegate:(id <StreamWrapperDelegate>)delegate;
- (void)writeData:(NSData *)data;
@end
@protocol StreamWrapperDelegate <NSObject>
@required
- (void)streamWrapper:(StreamWrapper *)streamWrapper didReceiveData:(NSData *)data;
- (void)streamWrapperDidConnect:(StreamWrapper *)streamWrapper;
- (void)streamWrapperDidCloseConnection:(StreamWrapper *)streamWrapper;
@end
类:
@interface StreamWrapper () <NSStreamDelegate>
...
@property (nonatomic, weak) id <StreamWrapperDelegate> delegate;
@property (nonatomic, strong) NSInputStream *inputStream;
@property (nonatomic, strong) NSOutputStream *outputStream;
- (void)closeStreams;
- (void)setAndOpenStreams;
@end
@implementation StreamWrapper
#pragma mark - NSStreamDelegate
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventEndEncountered:
// Should I here close both streams (even if this is called only for one (in or out)) and delegate closed connection?
break;
case NSStreamEventErrorOccurred:
// Should I here close both streams (even if this is called only for one (in or out)) and delegate closed connection?
break;
case NSStreamEventHasBytesAvailable:
// My reading algorithm...
[self.delegate streamWrapper:self didReceiveData:data];
break;
case NSStreamEventHasSpaceAvailable:
// Is this useful for me?
break;
case NSStreamEventNone:
// Is this useful for me?
break;
case NSStreamEventOpenCompleted:
// Should I here delegate successful connection? Should I wait to receive this for both streams? How?
break;
default:
break;
}
}
...
@end
所以...如何实现我将始终知道何时建立连接并且我能够发送和接收数据以及何时断开连接(即使只有一种方式)我应该关闭它并尝试全新的成立?或者做这样的事情的正确方法是什么?
最佳答案
NSStreamEventNone
No event has occurred.
Available in OS X v10.3 and later.
Declared in NSStream.h.
NSStreamEventOpenCompleted
The open has completed successfully.
Available in OS X v10.3 and later.
Declared in NSStream.h.
NSStreamEventHasBytesAvailable
The stream has bytes to be read.
Available in OS X v10.3 and later.
Declared in NSStream.h.
NSStreamEventHasSpaceAvailable
The stream can accept bytes for writing.
Available in OS X v10.3 and later.
Declared in NSStream.h.
NSStreamEventErrorOccurred
An error has occurred on the stream.
Available in OS X v10.3 and later.
Declared in NSStream.h.
NSStreamEventEndEncountered
The end of the stream has been reached.
Available in OS X v10.3 and later.
Declared in NSStream.h.
关于ios - 通过 NSStream 判断连接建立成功和连接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045292/
我想使用 nsstreams 发送和接收一些数据。我不想让我的代码如此困惑,所以我想知道: 我是否需要保留对 NSStream 的强引用,或者 [NSStream scheduleInRunLoop:
我正在将文件上传到服务器,使用 NSStream API 分块读取。我正在尝试显示一个显示上传进度的进度条。我无法找到可靠的解决方案来确定读入文件的字节数。更改文件和 block 大小,我仍然不断获取
我真的不能理解这个事件。 我希望在发送队列(或类似内部结构)发送完先前写入的数据包后调用它。 这是正确的假设吗? 我正在通过Multipeer连接开发视频流,我想使用此属性来决定是否应该放下摄像机框架
我有一个应用程序在另一个线程上使用 NSStream 连接到服务器。如果用户决定注销,应用程序也会关闭连接。问题是我永远无法在用户断开连接后成功关闭流或线程。下面是关于如何为网络创建线程并尝试关闭流的
在我正在开发的 iPad 应用程序中,我需要将网络处理放在一个单独的线程上,因为它偶尔会阻塞应用程序的 UI。目前,我已经创建了一个 Connection 对象,所有网络逻辑都在其中进行( NSStr
我正在尝试在 iOS 上编写 telnet 客户端,但无法正确设置流。我认为它们可以工作,但每次触发委托(delegate)方法时我都会得到空缓冲区。 以下是我设置流的方式: self.manager
我在 iOS 中进行客户端-服务器通信已经有一段时间了,但我遇到了一个我无法理解的问题。 我写了两个基本函数:一个向服务器发送数据,另一个从服务器接收数据。每个都有一个名为 timeout 的参数,它
我有一个连续打开的 TCP 连接,用于与外部设备通信。通信管道中发生了很多事情,导致 UI 有时变得无响应。 我想将通信放在一个单独的线程中。我了解 detachNewThread 以及它如何调用 @
在Ray Wenderlich tutorial on sockets为了从 Objective-C 中的输入流中读取字节,我们做了 uint8_t buffer[1024]; int
我在连接到服务器的 iphone 应用程序中有一个 NSInputStream 和一个 NSOutputStream。我能够毫无问题地将数据读取和写入套接字。问题是我有一个断开连接按钮,当我尝试在其中
如何同步调用NSStream获取结果?? 目前我在其委托(delegate)方法之一中收到异步回调 `(void)stream:(NSStream *)theStream handleEvent:(
全部, 我已经通过注释、断点等方式将它运行到这一点。程序在标记的代码处崩溃。 -(void) initNetworkCommunication { CFReadStreamRef readSt
我编写了一个程序,使用 Apple 流编程指南中概述的 NSStream 协议(protocol)连接到给定 IP 上的服务器。数据的连接和传输工作完美,但是如果用户指定了错误的 IP 并且程序尝试打
我有一个使用 NSStream 进行连接的客户端-服务器应用程序。有时,当尝试打开连接时,连接的一侧在第一次尝试发送消息时会收到 NSStreamEventEndEncountered。 我使用 CF
我正在尝试为 NSStream 编写包装器之类的东西,以使我的生活更轻松。我只想知道什么时候建立连接,什么时候关闭,写一些数据获取接收到的数据。所以我在想这样的事情: 标题: @interface S
我需要从家庭自动化服务器获取设备列表的状态。我要查询的设备在一个数组中。 我正在尝试循环遍历该数组,对于每个设备,我正在向服务器发送数据。我遇到的问题是服务器只收到一个包含我的 3 个命令的字符串。
一切都按预期工作,只是一步一步抛出调试器,否则我会得到 EXC_BAD_ACCESS。我想我需要在某个地方延迟或等待(最好)某件事。 // 1) Create streams(input/output
我正在使用 Objective-C 创建一个基于套接字的 iOS 应用程序,现在我的要求是同时连接到两个服务器。 我正在使用 NSInputStream 和 NSOutputStream,我能够连接到
使用ExternalAccessory与蓝牙设备通信,我使用EASession提供的输入和输出NSStreams向其发送消息。 在Apple的EADemo示例中,它将两个流调度到主线程的运行循环。但是
我正在使用 NSStream 通过 MCSession 发送大量的 UIImage 数据。 当我得到字节时 - (void)stream:(NSStream *)aStream handleEvent
我是一名优秀的程序员,十分优秀!