0

私はAndroid用のクライアントサーバーアプリケーションをプログラムしましたが、iPhone用にも同じことをしています。重要なのは、JavaサーバーとAndroidクライアントを使用した通信プロセスで、次のようなプログラムを作成したことです(疑似...):

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ライブラリを使用して行われるコード例。

ありがとうございました!

4

1 に答える 1

1

最近、TCPJavaサーバーと一緒にasyncsocketを使い始めました。おそらくこのコードが役立つかもしれませんか?

ソケットに書き込むには、asyncsocketオブジェクトから次のメソッドを呼び出す必要があります

-(void)writeData:withTimeout:tag:;

ここでのデータはNSDataオブジェクトである必要があります。次のようにすることで、文字列をNSDataに簡単に変換できます。

[someStringObject dataUsingEncoding:NSUTF8Encoding];

ソケットから読み取るには、このメソッドを呼び出すだけです

-(void)readDataWithTimeOut:tag:;

タイムアウトが必要ない場合は、タイムアウトに-1を渡します。

以上です。cocoaasyncsocketを使用した読み取り/書き込みは、datainputstreamやdataoutputstreamなどが必要なJavaでソケットを処理するよりもはるかに簡単です。

重要なデリゲートメソッドは

-(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.

}

あなたが理解できないことがあれば、私に知らせてください。私はあなたの疑問に答えようとします。

于 2011-11-06T15:19:20.547 に答える