2011-08-26 50 views
0

我爲Android編寫了一個客戶端 - 服務器應用程序,並且我正在爲iPhone執行相同的操作。 的事情是,在溝通過程中,與Java服務器和Android客戶端,我編程是這樣的(僞...):如何使用「iphone套接字」編程通信協議?

data = read(); 
if (data.compareTo("Something1") == 0) then 
    write("Something2"); 
    data = read(); 
    if (data.compareTo("Something3") == 0) then 
      //End communitacion 
    endif 
endif 

現在我的問題是,與「iphone套接字「我不知道該怎麼做。我正在使用AsyncScoket庫,並且使用該庫的讀取沒有阻塞(這對我來說很複雜),它使用回調函數,我不知道如何正確使用它。

我猜測讀取完成後,如果發送的數據等於「Something1」或「Something2」,我應該測試適當的回調......但是,第一個小問題是它沒有任何訂單。

我應該說我沒有時間修改協議。

如果有人能指導我,我會很感激。或者使用AsyncSocket庫完成網絡通信的任何代碼示例。

謝謝!

回答

1

我最近開始使用asyncsocket以及TCP java服務器。也許這個代碼可能有幫助?

寫信給你需要從asyncsocket對象

-(void)writeData:withTimeout:tag:; 

數據來電來訪下面的方法應該是一個NSData對象的插座。您可以輕鬆地將字符串轉換爲NSData的做

[someStringObject dataUsingEncoding:NSUTF8Encoding]; 

從插座上只讀取調用此方法

-(void)readDataWithTimeOut:tag:; 

通-1超時,如果你並不需要一個超時。

就是這樣。使用cocoaasyncsocket進行讀/寫比處理Java中需要datainputstream和dataoutputstream等的套接字容易得多。

重要的委託方法是該委託的

-(void)onSocket:didReadData:withTag: gets called whenever the socket reads some data. 

例子是..

-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 

     NSString *string = [[NSString alloc] initWithBytes:[data bytes] 
                length:[data length] 
               encoding:NSUTF8StringEncoding]; 
    //Do what ever comparison you'd like here. 

} 

如果有什麼事情,你不明白,然後讓我知道,我會盡力和答案你的疑惑。

+0

最後,我用了。抱歉忘記回答。 – newlog