我在網上找到了一些建立tcp連接的類。鏈接在here。我想定製一個類,到目前爲止,我可以建立一個連接發送數據和接收數據,這很好。一旦我已經創建並導入由我提供我可以使用下面的方法來建立連接的第一個鏈接中使用的類:在返回值之前等待iPhone
-(void) connectToServerUsingCFStream:(NSString *) urlStr portNo: (uint) portNo {
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef) urlStr,
portNo,
&readStream,
&writeStream);
if (readStream && writeStream) {
CFReadStreamSetProperty(readStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue);
iStream = (NSInputStream *)readStream;
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)writeStream;
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
}
}
因爲我要使用這個類有很多關於我的申請,我創建我自己的班級,我想創建一個-(BOOL) connect{}
方法。我想回答是的是連接建立,否則沒有。問題是我能夠判斷我建立連接的方式是通過創建一個試圖發送數據的連接,然後在服務器端創建一個方法,只要我收到該消息,就會發回一個字符串。如果在接下來的2秒內我收到數據,我知道連接已建立。
所以在我的連接方法我想等待2秒,然後根據如果布爾變量didReciveData返回一個值= YES。
當我發現[ostream的寫:]返回和int我想,也許這是解決方案。但是,如果我在出於某種原因提供不正確的IP地址時嘗試運行它,它不會返回任何內容。它只是等待在那裏。我會繼續嘗試...... –
你等了多久?如果我提供了一個錯誤的IP,它需要一段時間,但最後它返回-1 ... – Saphrosit
是的,但它是我的情況,我不知道爲什麼它需要永遠。我嘗試等待兩分鐘,當我到達時,應用程序被凍結:[oStream write:buf maxLength:strlen((char *)buf)];非常感謝Saphrosit –