2012-08-01 80 views
0

我想我的iOS应用程序连接到打印机的ad-hoc网络上,我需要检查的连接发送任何内容到打印机之前开放和有效的,我如何能实现这个?目前我正在做以下操作: CFReadStreamRef readStream; CFWriteStreamRef writeStream;插座检查TCP/IP连接存在,缩短超时

readStream = NULL; 
writeStream = NULL; 

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)IPADDRESS, NUM_PORT,NULL ,&writeStream); 

if(writeStream) 
{ 
    //inputStream = (__bridge NSInputStream *)readStream; 
    oStream = (__bridge NSOutputStream *)writeStream; 

    //[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    //[iStream setDelegate:delegate]; 
    [oStream setDelegate:delegate]; 
    //[iStream open]; 
    [oStream open]; 
} 

int bytesWritten; 
    int bytesTotal = [data length]; 

    bytesWritten = [oStream write:[data bytes] maxLength: bytesTotal]; 
    NSLog(@"Bytes Written To Printer : %d",bytesWritten); 

但它总是要和writeStream是从来没有空,因此我无法阻止它试图将数据推到插座。

〜编辑 - 也许是我最好的改写我的问题,我怎么能阻止它挂了30秒以上,直到它意识到有没有联系?

+0

什么协议是您使用交谈的打印机吗? – trojanfoe 2012-08-01 10:18:24

+0

@trojanfoe对不起,我不太清楚你的意思,我只是通过NSOutputStream发送原始数据到打印机的IP和端口。 – 2012-08-01 10:26:14

+0

您未使用IPP?我不明白打印机如何响应原始数据。 – trojanfoe 2012-08-01 10:27:05

回答

1

我需要检查的连接发送任何内容到打印机之前开放和有效的,我怎样才能做到这一点?

通过送点东西给打印机。检测TCP连接问题的唯一方法是使用它进行一些I/O。

+0

好吧...也许我最好改写我的问题,我怎样才能阻止它挂起30秒以上,直到它意识到没有连接? – 2012-08-01 10:20:53

+0

进一步调查后,我使用了Reachabillity在尝试发送数据之前首先ping IP – 2012-08-01 12:39:31