我已经实现了从Windows桌面应用程序转移到iPhone App的客户端 - 服务器。我在轮询模式下使用NSStream传输数据(同步)。
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)urlStr, portNo, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream open];
[outputStream open];
一切正常,但是当我尝试连接不存在的服务器或断开连接的服务器或端口号/ IP地址错误时,NSOutputStream对象的WRITE方法会停止应用程序的执行。
const uint8_t *str = (uint8_t *) [strRichiesta cStringUsingEncoding:NSASCIIStringEncoding];
[outputStream write:str maxLength:strlen((char*)str)];
是否可以通过插入超时控制来管理方法? 如果是,我该怎么办?
我认为NSInputStream对象的READ方法也会出现同样的问题。
有人可以帮助我吗?
答案 0 :(得分:2)
检查NSStream
s'streamStatus
和streamError
功能,然后再尝试使用它们进行读写。有关详细信息,请参阅Apple的NSStream Documentation。
这也可能有所帮助:Setting Up Socket Streams
修改: NSStreamStatus值:
typedef enum {
NSStreamStatusNotOpen = 0,
NSStreamStatusOpening = 1,
NSStreamStatusOpen = 2,
NSStreamStatusReading = 3,
NSStreamStatusWriting = 4,
NSStreamStatusAtEnd = 5,
NSStreamStatusClosed = 6,
NSStreamStatusError = 7
};
在使用之前,您必须等到状态为“打开”。可能需要几秒钟(甚至30秒)才能将错误的URL解析为状态错误。