我在连接到服务器的iphone应用程序中有一个NSInputStream和一个NSOutputStream。我能够毫无问题地对套接字进行读写。问题是我有一个断开按钮,当我试图在任何一个流上调用close时,它会挂起应用程序。我猜我试图在错误的时间调用close,但我不确定什么是正确的时间。
发布于 2011-05-03 21:34:34
很可能在收到输入和输出流后,您没有保留它们:)我遇到了完全相同的问题,但它花费了我很多时间来寻找解决方案:)
发布于 2010-07-24 00:00:31
您必须确保告诉底层为您关闭本机套接字。下面是我的一个网络应用程序中的一些代码:
...
CFReadStreamRef readStreamRef;
CFWriteStreamRef writeStreamRef;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)host, port, &readStreamRef, &writeStreamRef);
if (readStreamRef && writeStreamRef)
{
CFReadStreamSetProperty(readStreamRef, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStreamRef, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
inputStream = (NSInputStream*)readStreamRef;
outputStream = (NSOutputStream*)writeStreamRef;
...发布于 2012-12-05 16:57:34
保留NSOutputStream解决了我的问题,希望对其他人有所帮助。示例代码是用ARC编写的,所以它们不需要再保留,但如果你不使用ARC,你就必须保留。
NSOutputStream *outputStream = (NSOutputStream *)CFBridgingRelease(writeStream);
**[outputStream retain];**
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[outputStream open];https://stackoverflow.com/questions/3316427
复制相似问题