使用NSOutputStream,我第一次就能完美地编写。
以下是发送数据的方法:
- (NSInteger)sendVsCommand:(VsCommand *)command
{
NSData *commandArray = [NSData dataWithData:[command getCommandArray]];
NSLog(@"Space availiable: %d", [writeStream hasSpaceAvailable]);
NSInteger result = [writeStream write:[commandArray bytes]
maxLength:[commandArray length]];
NSLog(@"Writing result: %d", result);
return result;
}
以下是事件的处理:
case NSStreamEventHasSpaceAvailable:
NSLog(@"%@ can accept bytes", aStream);
if (aStream == writeStream) {
NSLog(@"Can send data: %d", [writeStream hasSpaceAvailable]);
}
break;
无论如何,这只是一个重要的"案例"。
以下是控制台中的结果:
2013-08-16 18:07:12.769 hMonitor[5765:307] <__NSCFInputStream: 0x148650> is open
2013-08-16 18:07:12.776 hMonitor[5765:307] <__NSCFOutputStream: 0x148330> is open
2013-08-16 18:07:12.777 hMonitor[5765:307] <__NSCFOutputStream: 0x148330> can accept bytes
2013-08-16 18:07:12.779 hMonitor[5765:307] Can send data: 1
2013-08-16 18:07:13.107 hMonitor[5765:307] <__NSCFInputStream: 0x148650> has bytes
2013-08-16 18:07:13.112 hMonitor[5765:307] Space availiable: 1
2013-08-16 18:07:13.116 hMonitor[5765:307] Writing result: 41
2013-08-16 18:07:13.118 hMonitor[5765:307] <__NSCFOutputStream: 0x148330> can accept bytes
2013-08-16 18:07:13.119 hMonitor[5765:307] Can send data: 1
2013-08-16 18:07:13.687 hMonitor[5765:307] <__NSCFInputStream: 0x148650> has bytes
2013-08-16 18:07:15.343 hMonitor[5765:307] Space availiable: 0
2013-08-16 18:07:15.345 hMonitor[5765:307] Writing result: 0
正如你所看到的,当溪流开放时,我可以写得很好(can发送数据:1)。
然后我收到一些数据,并立即写一个响应,Space可用:1,写作成绩:41。
OutputStream几乎立即可以自由再次写入,可以发送数据:1(但我不需要发送任何东西,直到用户做出一些选择)。我很快就得到了回应。
最后,我试着再次写作(2秒后,因为那时用户已经进行了选择)。但是,现在可用空间是否,写入结果为0。
有什么想法吗?你建议我去哪里看?
提前谢谢。
我的指针变成了零,因为我没有以正确的方式处理它们。
只是为了展示我在Objective-C中的环保程度。