IOS Socket写入服务器和服务器从客户端接收数据

时间:2014-08-29 08:14:30

标签: ios sockets

我使用此代码将图像数据(nsdata)发送到服务器

- (void)sendImageData: (UIImage *)image {
NSData *imageData = [UIImagePNGRepresentation(image) base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
[outputStream write:[imageData bytes] maxLength:[imageData length]];

}

问题是:当我选择一个小尺寸的图像时,服务器将收到我发送的完整图像数据。但是,当我发送更大的图像时,服务器将不会收到我的所有数据。 为什么?帮我? 服务器接收数据代码:

int n = read(newSocket, buffer, 1024*256);
if (n < 0) {
    NSLog(@"error reading from socket!");
    return;
}
NSString *buffer2string = [NSString stringWithFormat:@"%s",buffer];
[stringData appendString:buffer2string];

1 个答案:

答案 0 :(得分:0)

我假设您正在使用TCP并处于阻止模式。 TCP不会一次发送所有数据,因此您应该在while循环中调用read方法。 (默认情况下,当tcp的接收缓冲区中有1个字节时,读取方法返回)必须关闭客户端连接以告知服务器已完成传输,否则服务器将永远不会离开while循环。

我没有测试代码,您可以尝试并告诉我它是否无法正常工作。

int position = 0 ;
while (1) {
    int n = read(newSocket, buffer+position, 1024*256-position);
    if (n < 0) {
        NSLog(@"error reading from socket!");
        break ;
    } else if (n == 0) {
        NSLog(@"socket closed by peer") ;
        break ;
    } else {
        position += n ;
    }
}
相关问题