1

我已经实现了从 Windows 桌面应用程序到 iPhone 应用程序的客户端-服务器传输。我在轮询模式(同步)下使用 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 方法也会出现同样的问题。

有人可以帮我吗?

4

1 回答 1

2

在尝试使用它们进行读写之前检查NSStreams'streamStatus和函数。streamError有关详细信息,请参阅 Apple 的NSStream 文档

这也可能有所帮助:设置套接字流

编辑: NSStreamStatus 值:

typedef enum {
    NSStreamStatusNotOpen = 0,
    NSStreamStatusOpening = 1,
    NSStreamStatusOpen = 2,
    NSStreamStatusReading = 3,
    NSStreamStatusWriting = 4,
    NSStreamStatusAtEnd = 5,
    NSStreamStatusClosed = 6,
    NSStreamStatusError = 7
};

您必须等到状态为“打开”才能使用它。错误的 URL 可能需要几秒钟(甚至 30 秒)才能解析为错误状态。

于 2012-01-19T02:09:16.940 回答