2013-05-07 6 views
0

나는 서버없이 파일을 전송할 수있는 P2P 응용 프로그램을 설계했습니다. 모든 것이 잘 작동합니다. 동료간에 파일을 전송할 수 있습니다. 하지만 파일 크기가 16MB보다 크다면 (크기가 15810KB 인 전송할 수있는 파일 중 가장 큰 파일 크기) 그것이 피어로 전송되지는 않습니다. 이것은 내가 사용하고있는 코드입니다 :actionscript 3.0 - p2p filesharing 문제 (최대 업로드 파일 크기)

  private function browseFile(farIds:String = ""):void { 
      fIds = farIds; 
      file = new FileReference(); 
      file.addEventListener(Event.SELECT, selectHandler); 
      file.browse(); 
     } 

     private function selectHandler(event:Event):void { 
      var btn = getChild("browseFile_" + fIds) 
      if (btn && btn.alpha) btn.alpha = 0.5; 
      file = FileReference(event.target); 
      file.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
      file.addEventListener(Event.COMPLETE, completeHandler); 
      file.load(); 
     } 

     private function progressHandler(event:ProgressEvent):void{ 
      ExternalInterface.call("fileLoadProgress", event.target.name, event.bytesTotal, event.bytesLoaded) 
     } 

     private function completeHandler(event:Event):void{ 
      ExternalInterface.call("onFileLoaded") 
      var fileData:Object = new Object(); 
      fileData.file = event.target.data 
      fileData.name = event.target.name; 
      var btn = getChild("browseFile_" + fIds) 
      if (btn && btn.alpha) btn.alpha = 1; 
      sendSomeData(fileData, fIds, "receiveFile"); 
     } 

     public function receiveFile(info:Object, peerID:String):void{ 
      ExternalInterface.call("alert", "receivedFile") 
     } 

     private function sendSomeData(data,farIds:String,func:String = "receiveSomeData"):void{ 
      for(var id:String in sendStreams){ 
       sendStreams[id].send(func, data, myPeerID); 
      } 
     } 

어떤 크기의 모든 파일을 전송할 수 있습니까?

도움 주셔서 감사합니다.

답변

1

파일을 8KB의 덩어리로 분할하여 하나씩 보낼 수 있습니다. 그러나 수신 된 청크의 순서와 발생 가능한 손실을 확인해야합니다.

+0

예, 문제를 해결할 수있는 유일한 방법 인 것처럼 보이지만 어떻게 파일을 분할하고 그 부분에 어떻게 가입시킬 수 있습니까? – SuperYegorius

+1

'ByteArray'를 사용하여'Object'를 (ByteArray.writeObject'를 사용하여) 변환하고, 여러 ByteArray로 분할 한 다음 ByteArray를 사용하여 하나의 ByteArray로 다시 결합 할 수 있습니다. readBytes'와'ByteArray.writeBytes') 그리고 결과를'Object'로 디코딩합니다 (ByteArray.readObject를 사용하여). –