无法在iOS上刷新输出流

时间:2015-01-23 14:14:42

标签: ios json sockets outputstream flush

我是客户端服务器编程的新手,所以如果我犯了一些明显的错误,请原谅我。

为了给出一个上下文,我们正在开发一个客户端服务器应用程序,其中客户端通过套接字将json中的图像/视频发送到服务器。

我们也在发送多个数据包中的单个图像/视频文件 - 数据包大小为2kb

这是我的代码

-(void)sendDataToServer:(NSData*)tmpdata

{
    NSMutableData *jsonData = [tmpdata mutableCopy];
    NSData *nsdata = [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding];
    [jsonData appendData:nsdata];
    uint32_t some_long = (uint32_t)[jsonData length];
    uint32_t network_byte_order;
    //convert and send
    network_byte_order = htonl(some_long);
    NSUInteger len = [jsonData length];
    int litIndianSize;
    [[NSData dataWithBytes:&len length:4] getBytes:&litIndianSize length: sizeof(litIndianSize)];
    NSLog(@"actaul data of 4 byte=%i",litIndianSize);
    NSData *data2 = [NSData dataWithBytes: &network_byte_order length:sizeof(network_byte_order)];
    NSMutableData *completeData = [data2 mutableCopy];
    [completeData appendData:jsonData];

    if([outputStream write:[completeData bytes] maxLength:[completeData length]]==-1)
    {
        NSLog(@"error in writing on stream");
    }
}

但是这段代码正在给出"解析错误"在服务器上。以下是我认为正在发生的事情。

由于客户端正在非常快速地将这些数据包发送到服务器,因此有时输出流不会正确刷新。这导致多个数据包合并到一个数据包中,服务器无法将其解析为一个json数据包。

您能告诉我我的代码是否有问题,或者是否有其他方法可以正确刷新输出流?

此外,Android客户端能够使用相同的原则(数据包大小为2 KB等)成功地将图像/视频发送到服务器。 (如果需要,我也可以在这里发布Android代码)

0 个答案:

没有答案