2012-08-01 87 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