2

C# tcpip サーバーから wifi 経由で iphone/ipodtouch アプリにデータを送受信しようとしています。このために、Google プロジェクトの cocoaAsyncSocket を使用しました。ボタンを押してiPodからサーバーにリクエストを送信すると、リクエストされたデータ(曲のタイトルなど)が返されます....どの曲が再生されているかを毎秒知りたいので、C#サーバーから1の間隔で送信しますアプリへの 2 番目のメッセージ。私のアプリでは、間隔が 1 秒のタイマーで、asyncSocket 読み取り readDataWithTimeout メソッドを呼び出します。私の問題は、8〜9秒後にそのメソッドが呼び出されなくなったことです。サーバーへの接続はまだアクティブで、C# サーバーは引き続きデータを送信します。

私がやりたいことは次のことです: -> winamp が曲を再生します -> C# サーバーは winamp に彼が再生している曲を尋ね、曲のタイトルをアプリに送信します。→iPhoneアプリがデータを受け取り表示

readDataWithTimeout メソッドが短時間で呼び出されなくなった理由がわかりません.C# サーバーから送信されるメッセージ間の時間が短いためでしょうか?

ありがとう、ソリン

4

2 に答える 2

1

私はそれを機能させました..もう少し読んだ後...だから、データが不明な間隔でAsyncSocketで到着したときにデータを読み取るために、Fallowingコードを使用しました(最善の解決策かどうかはわかりませんが、私が望んでいたものには機能します) :

- (void) readDataFromSocket
{
        [socket readDataWithTimeout:-1 tag:0];
}

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length])];
    NSString *msg = [[[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding] autorelease];
    if(msg)
    {
        if([msg isEqualToString:@"something"])
        {
            Do stuff
        }
        else
        {
            Do something else
            }
        }
    }
    else
    {
        NSLog(@"Error converting received data into UTF-8 String");
    }
    [socket readDataWithTimeout:-1 tag:0];
}

アプリケーションで、ソケット [socket readDataWithTimeout:-1 tag:0] メソッドを呼び出す readDataFromSocket メソッドを 1 回呼び出します。最後の行の (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag メソッドで [socket readDataWithTimeout: -1 タグ:0]; これは、ソケットをリッスンするようにソケットに指示します。データが到着すると、ソケットはそれを読み取ります。

それが誰かを助けることを願っています..

于 2009-05-14T05:24:35.423 に答える