使用NSStreamEventHasSpace available事件,我尝试将一个简单的NSString写成一个NSOutputStream。以下是该事件的内容:
uint8_t *readBytes = (uint8_t *)[data mutableBytes];
readBytes += byteIndex; // instance variable to move pointer
int data_len = [data length];
unsigned int len = ((data_len - byteIndex >= 12) ?
12 : (data_len-byteIndex));
uint8_t buf[len];
(void)memcpy(buf, readBytes, len);
len = [output write:(const uint8_t *)buf maxLength:len];
NSLog(@"wrote: %s", buf);
byteIndex += len;我几乎是直接从苹果那里学来的。在我的viewDidLoad方法中,数据被初始化为
data = [NSMutableData dataWithData:[@"test message" dataUsingEncoding:NSUTF8StringEncoding]];
[data retain];HasSpaceAvailable事件被调用两次。在第一个示例中,整个消息都是用字符“N”编写的。附加在它后面。第二次,NSLog报告写了一条空消息(非null)。然后,发生EndEncountered事件。在这种情况下,我有
NSLog(@"event: end encountered");
assert([stream isEqual:output]);
NSData *newData = [output propertyForKey: NSStreamDataWrittenToMemoryStreamKey];
if (!newData) {
NSLog(@"No data written to memory!");
} else {
NSLog(@"finished writing: %@", newData);
}
[stream close];
[stream removeFromRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[stream release];
output = nil;
break;这也是我从苹果公司买的。但是,“没有数据写入内存!”已记录。任何时候都不会发生错误,另一端似乎也没有接收到任何数据。
发布于 2012-08-28 05:06:58
我似乎已经通过使用低级核心基础方法而不是高级NSStream方法修复了这个问题。我以这篇文章为起点:
http://oreilly.com/iphone/excerpts/iphone-sdk/network-programming.html
它以很长的篇幅介绍了输入流和输出流,并提供了代码示例。
希望这能有所帮助。
https://stackoverflow.com/questions/11689264
复制相似问题