6

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

誰かが問題の原因を教えてもらえますか?

4

1 に答える 1

0

同じメッセージが表示されます。「getHandShakeParameter」文字列でサービスを呼び出しますが、彼の名前は「G」を大文字にした「GetHandShakeParameter」でした...

問題が解決しました ;)

于 2013-11-22T16:01:09.460 に答える