NSOuptutStream の書き込みメソッドを使用して、サーバーからクライアントに大きなサイズの画像を送信しようとしています。ただし、684032 バイトを書き込んだ後、ストリームによってバイトが書き込まれなくなっていることがわかりました。これは特に奇妙だと思います。サイズ < 680432 の画像を送信し、クライアント側で適切に受信できます。以下にコード スニペットを添付します。誰かが私が間違っているところを正確に指摘できれば素晴らしいことです。
UIImage *img;
img = [UIImage imageWithContentsOfFile:path];
NSMutableData *imgData = [UIImageJPEGRepresentation(img, 1.0) mutableCopy];
const void *bytes = [imgData mutableBytes];
NSInteger length = [imgData length];
self.bufferLimit = length;
NSLog(@"self.bufferoffset %d self.bufferlimit %d", self.bufferOffset, self.bufferLimit);
uint8_t *crypto_data = (uint8_t *)bytes;
NSInteger bytesWritten;
if([self.outputStream hasSpaceAvailable]) {
NSLog(@"Space Available");
} else NSLog(@"Space Not Available");
while (self.bufferOffset < self.bufferLimit) {
bytesWritten = [self.outputStream write:(uint8_t *)crypto_data maxLength:1024];
NSLog(@"server: bytes weritten %d",bytesWritten);
assert(bytesWritten != 0);
if (bytesWritten == -1) {
[self stopSendWithStatus:@"output buffer write error"];
} else {
self.bufferOffset += bytesWritten;
}
NSLog(@"self.bufferoffset %d self.bufferlimit %d", self.bufferOffset, self.bufferLimit);
}
NSLog(@"Done sending");
[self.outputStream close];
私のコードがハングしたとき、これは私が残した出力です
...
2012-07-04 13:53:20.903 BasicClientServer[1707:f803] self.bufferoffset 681984 self.bufferlimit 1334301
2012-07-04 13:53:20.903 BasicClientServer[1707:f803] サーバー: バイト数 1024
2012- 07-04 13:53:20.904 BasicClientServer[1707:f803] self.bufferoffset 683008 self.bufferlimit 1334301
2012-07-04 13:53:20.905 BasicClientServer[1707:f803] サーバー: 1024
2012-07-04 13 を受け取ったバイト: 53:20.906 BasicClientServer[1707:f803] self.bufferoffset 684032 self.bufferlimit 1334301
そして、この点を超えません