【问题标题】:Sending large data over bonjour通过 bonjour 发送大数据
【发布时间】:2011-04-11 19:36:14
【问题描述】:

我目前有一种通过 Bonjour 发送数据的方法。问题是我的数据限制为 1000 kB。我知道如果我想发送更大的数据,我需要将它分成数据包。

但这提出了一个问题,即如何防止数据包丢失,并确保接收方接收到所有数据包。

我不擅长网络,想请你帮我改变这个简单的方法,以实现更大的数据传输。

- (BOOL)sendData:(NSData *)data error:(NSError **)error {
    BOOL successful = NO;
    if(self.outputStreamHasSpace) {

        NSInteger len = [self.outputStream write:[data bytes] maxLength:[data length]];
        if(-1 == len) {
            // error occured
            *error = [[NSError alloc] 
                      initWithDomain:ServerErrorDomain
                      code:kServerNoSpaceOnOutputStream
                      userInfo:[[self.outputStream streamError] userInfo]];
        } else if(0 == len) {
            // stream has reached capacity
            *error = [[NSError alloc] 
                      initWithDomain:ServerErrorDomain
                      code:kServerOutputStreamReachedCapacity
                      userInfo:[[self.outputStream streamError] userInfo]];
        } else {
            successful = YES;
        }
    } else {
        *error = [[NSError alloc] initWithDomain:ServerErrorDomain
                                            code:kServerNoSpaceOnOutputStream
                                        userInfo:nil];
    }

 return successful;
}

谢谢。

【问题讨论】:

  • @Joe Blow 你是对的,尽管 GAMEKIT 隐藏在幕后。我已经用比我的缓冲区大的数据解决了这个问题。

标签: iphone networking bonjour


【解决方案1】:

您不是通过“Bonjour”发送它们,而是将 UDP 数据包发送到多播地址。在大多数网络上,最大帧大小为 1500 字节。实际上,考虑到标头、vlan 标签等,每帧大约需要填充 1.3 - 1.4k 的数据。当数据通过 UDP 传输时,控制数据包的正确接收和排序取决于您 - 这是不使用 TCP 的缺点之一;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2012-10-13
    相关资源
    最近更新 更多