2010-10-08 24 views
0

我在過去的幾個月裏一直在教自己的Objective-C;我正在爲我的公司構建iPhone應用程序。我從一個完整的新手開始(現在仍然是),但直到現在,我還沒有任何問題可以輕鬆地在線查找各個位置的所有問題。使用cocoaasyncsocket通過UDP傳輸字符串

對於最後一個,也是最重要的一塊我的應用程序,我需要在按下一個按鈕,一個簡單的字符串通過UDP發送到一個地址/端口。字符串,地址和端口都是從傳遞給我的視圖控制器的對象拉出的變量。

我一直在挖掘兩天尋找解決方案和閱讀的例子,但一切都認真閱讀像希臘語給我。我不確定我似乎錯過了哪些重要的知識,但我完全喪失了知識。我學到了關於cocoaasyncsocket的信息,它是多麼的「簡單」,它聽起來對我所需要的是完美的,但我似乎無法將我的思想包圍在內。我真的希望這裏有人能幫我把它分解成簡單的詞彙。

這是我一直在嘗試的代碼片段,但沒有運氣。此代碼是從我viewController,與AsyncUdpSocket.h進口:

-(IBAction)udpButtonTwoPressed:(id)sender { 
    NSData *myData; 
    myData = [[NSData alloc] initWithData:([selectedObject 
     valueForKey:@"udpCommandTwo"])]; 

    AsyncUdpSocket *mySocket; 
    mySocket = [[AsyncUdpSocket alloc] initWithDelegate:self ]; 

    NSError *error = nil; 
    if (!([mySocket connectToHost:([selectedObject 
     valueForKey:@"serverIPAddress"]) onPort:([[selectedObject 
     valueForKey:@"serverPort"] intValue]) error:&error])) { 
     NSLog(@"Can't Connect Cause: %@", error); 
     abort(); 
    } 

    [mySocket close]; 

    [mySocket release]; 
    [myData release]; 
} 

什麼我錯在這裏做什麼?

回答

0

從你的例子中可以看出兩點。

  1. 我沒有看到你寫任何東西到插座。看看writeData:withTimeout:標籤。

  2. CocoaAsyncSocket是異步的,所以在你的例子中一切都超出了範圍。如果你真的想同步寫作,那麼參考文獻中有一個例子。

    NSString * customRunLoopMode = @「MySyncWrite」;

    [asyncSocket addRunLoopMode:customRunLoopMode]; [asyncSocket writeData:didBackgroundData withTimeout:TIMEOUT_NONE tag:TAG_BG];

    syncWriteComplete = NO; BOOL runLoopReady = YES;

    而(runLoopReady & & syncWriteComplete!) { runLoopReady = [[NSRunLoop currentRunLoop] runMode:customRunLoopMode beforeDate:的NSDate dateWithTimeIntervalSinceNow:1.0]]; }

    [asyncSocket removeRunLoopMode:customRunLoopMode];

HTH