我试图通过WiFi从C#TCPIP服务器发送/接收数据到一个iPhone / iPodTouch的应用程式。为此,我使用cocoaAsyncSocket从谷歌的项目。如果我按下按钮,我从iPod发送请求到服务器返回所请求的数据(歌名例如)..我想知道每一秒哪首歌曲playng ...所以从C#我的服务器每隔1送第二个消息给我的应用程序。在我在1秒的时间间隔的计时器应用程序,我调用asyncSocket读readDataWithTimeout方法。我的问题是,8-9秒后该方法不再被调用。到服务器的连接仍然有效和C#服务器仍发送数据..

我想做的事是以后的事: - > AOL的Winamp播放歌曲 - > C#服务器要求winamp的什么歌曲是他演奏和发送歌名到我的应用程序。 - > iphone应用程序接收数据,并将其显示

我不知道为什么readDataWithTimeout方法没有time..Maybe短时间之后再调用,因为由C#服务器发送的消息之间的时间短?

感谢您, 索林

有帮助吗?

解决方案 2

我做到了work..after多一点读书......所以,当它与未知的时间间隔,我用休耕代码AsyncSocket到达读取数据(我不知道,如果是最好的解决方案,但它的工作原理什么我想):

- (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];
}

我在应用程序调用一次调用该插座[插座readDataWithTimeout:-1标签:0] readDataFromSocket方法方法。它应该在应用程序只能调用一次,因为在方法 - (无效)onSocket:(AsyncSocket *)袜子didReadData:(NSData的*)数据withTag:(长)标签方法的最后一行,我再次致电[插座readDataWithTimeout: -1标签:0];它告诉监听套接字上的插座。当数据到达套接字将读取它。

希望它可以帮助别人..

其他提示

几件事情在这里。首先,为什么这样做每一秒,而不是仅仅对歌曲的变化?这将是非常昂贵的iPhone电池不断唠叨这种方式。有什么理由这样做,即使在桌面上。

所以,如果我理解正确的话,iPhone连接到.NET并要求歌曲。 .NET返回歌曲和叶套接字打开。每一秒,.NET写入其插座,每个第二iPhone从其灯座读取。

我怀疑的情况是,在一些点上readDataWithTimeout:tag:超时不下一火灾的NSTimer到期前(既没有关于何时会触发任何真正的保证)。那么你可能会得到运行的同时将两个readDataWithTimeout:tag:电话,可能获得插座委托混淆。

更好的解决方案是一个“长轮询”。在iPhone上侧,调用readDataWithTimeout:tag:有一个相当长的时间(比如30-60s)。每次它返回,只是环右回它:

while (self.isRunning) {
    [socket readDataWithTimeout:60 tag:0];
}

然后,在-onSocketDidDisconnect:-onSocket:willDisconnectWithError:,确保self.isRunning设置为NO。完全删除了的NSTimer的。

我还没有发布从.NET方任何东西,直到Winamp的实际变化的歌曲,虽然。在发送相同的数据一次又一次没有做任何好处。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top