2016-10-14 2 views
1

TCP 소켓 연결을 사용하여 데이터를받는 데 NSInputStream을 사용하려고합니다. 서버 측에서 데이터 크기을 보내기 전에 데이터 자체를으로 보내십시오. 아이폰 OS 클라이언트 측에서 나는 데이터의 크기가 완전히 받았는지 확인해야합니다 때문에 NSInputStream에서 처음 4 바이트를 추출 할 필요가 있지만, 나는 그것이 문제가 : 항상 데이터 readBufferLengthRef의 수신 후NSInputStream 버퍼의 크기

... 
case NSStreamEvent.HasBytesAvailable: 
if (aStream == inputstream){  
    while (inputstream.hasBytesAvailable){      
     var readBufferRef   = UnsafeMutablePointer<UnsafeMutablePointer<UInt8>>() 
     var readBufferLengthRef = 0 
     let readBufferIsAvailable = inputstream.getBuffer(readBufferRef, length: &readBufferLengthRef) 
... 
    } 
} 
break 

을 0과 같습니다.

어떻게 될 수 있습니까?

그리고 NSInputStream 버퍼의 크기는 어떻게 얻을 수 있습니까?

UPD :

코드 :

코드에서
case NSStreamEvent.HasBytesAvailable: 
      NSLog("HasBytesAvaible") 
      var buffer = [UInt8](count: 1024, repeatedValue: 0) 
      if (aStream == inputstream){ 

       while (inputstream.hasBytesAvailable){ 

        var readBufferRef: UnsafeMutablePointer<UInt8> = nil 
        var readBufferLengthRef = 0 
        let readBufferIsAvailable = inputstream.getBuffer(&readBufferRef, length: &readBufferLengthRef) 
        //debugger: readBufferLengthRef = (int)0 
       } 
      } 
break 

답변

0

, readBufferRef는 "포인터 포인터"로 정의 그러나 결코 할당, 따라서는 NULL 포인터입니다. 읽기 버퍼로 설정되어 돌아

var readBufferRef: UnsafeMutablePointer<UInt8> = nil 
var readBufferLengthRef = 0 
let readBufferIsAvailable = inputStream.getBuffer(&readBufferRef, length: &readBufferLengthRef) 

, readBufferRef : 당신은 무엇을해야

은 (스위프트 2 가정) 기능 에 입출력 인수로 UnsafeMutablePointer<UInt8>주소를 전달하는 것입니다 (다음 읽기 조작까지 유효 함), readBufferLengthRef에는 사용 가능한 바이트 수인 이 들어 있습니다.

+0

귀하의 관심과 답변에 감사드립니다. 불행히도 여전히'readBufferLengthRef'에서 바이트 수를 얻을 수 없습니다. 내 질문의 UPD 섹션에서 전체 코드 세그먼트를 확인할 수 있습니다. 그것이 도움이 될 것 같아요. –

+0

@ don-prog : 미안하지만, 전혀 모른다 ... –

+0

와우 ... 어떻게 될 수 있니? 다른 걸 좀 확인해야할까요? –

관련 문제