iOS でソケット プログラミングを使用して印刷機能に取り組んでいます。次のコードを使用して、ストリームを開き、読み取りおよび書き込み操作を実行しています。ストリームを開いている間、入力ストリームと出力ストリームの両方のオープン イベントに対してデリゲートが呼び出されます。NSStreamEventHasSpaceAvailable
また、書き込み操作を実行するNSStreamEventHasBytesAvailable
イベントと、読み取り操作を実行するイベントも取得します。最初の 2 回は書き込み操作が正常に行われ、その後、読み取り操作を実行しようとしている場所で、bytes available イベントが発生します。読み取りバイトとして-1を取得 NSStreamEventErrorOccurred
し、メッセージでイベントを取得するたびに
「操作を完了できませんでした。ピアによって接続がリセットされました」
for のNSInputStream
後に同じイベントが続きNSOutputStream
、3 回目の書き込みを実行しています。時々、Broken Pipe エラーも発生します。
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"123.123.12.12",DEFAULT_LPR_PORT, &readStream, &writeStream);
self.inputStream = (__bridge NSInputStream *)readStream;
self.outputStream = (__bridge NSOutputStream *)writeStream;
[self.inputStream setDelegate:self];
[self.outputStream setDelegate:self];
[self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.inputStream open];
[self.outputStream open];
ストリーム イベント ハンドラー - デリゲート メソッド コード 読み取りバイト数は常に -1 です。
case NSStreamEventHasBytesAvailable:
{
NSLog(@"NSStreamEventHasBytesAvailable");
if (theStream == inputStream) {
uint8_t buffer[1024];
int len = 0;
while ([self.inputStream hasBytesAvailable]) {
len = [self.inputStream read:buffer maxLength:sizeof(buffer)];
NSLog(@"bytes read len --- :%d ",len);
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
if (nil != output) {
NSLog(@"bytes value: %@", output);
}
}
}
}
}
break;
エラー:
2013-09-18 12:27:36.424 SPConnector[1936:907] stream:handleEvent: : <__NSCFInputStream: 0x1e07b0e0>
2013-09-18 12:27:36.428 SPConnector[1936:907] NSStreamEventErrorOccurred localizedDescription --- The operation couldn’t be completed. Connection reset by peer
2013-09-18 12:27:36.430 SPConnector[1936:907] NSStreamEventErrorOccurred domain --- NSPOSIXErrorDomain
2013-09-18 12:27:36.431 SPConnector[1936:907] NSStreamEventErrorOccurred Code --- :54
2013-09-18 12:27:36.432 SPConnector[1936:907] stream:handleEvent: : <__NSCFOutputStream: 0x1e07b170>
2013-09-18 12:27:36.433 SPConnector[1936:907] NSStreamEventErrorOccurred localizedDescription --- The operation couldn’t be completed. Connection reset by peer
2013-09-18 12:27:36.434 SPConnector[1936:907] NSStreamEventErrorOccurred domain --- NSPOSIXErrorDomain
2013-09-18 12:27:36.435 SPConnector[1936:907] NSStreamEventErrorOccurred Code --- :54
誰かが問題の原因を教えてもらえますか?