2008-09-15 4 views
3

해피 포터 (Harry Potter) 타이틀과 같은 제목 줄을 유감스럽게 생각합니다.AS3 FTP 프로그래밍 및 소켓 및 ByteArray 클래스

AS3의 Socket 클래스를 사용하여 Flex Builder 3에서 AIR 응용 프로그램으로 내보내는 간단한 FTP 프로그램을 작성하려고합니다. 로컬 네트워크의 FTP 서버를 사용하여 프로그램을 테스트하고 있습니다. 성공적으로 서버에 연결할 수 있지만 쉬운 명령은 아닙니다. 나는이 명령을 보내기 위해 ByteArray 클래스를 사용해야한다고 확신하지만 분명히 빠진 중요한 정보가있다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사! Dave

답변

0

이 문제를 해결하려면 더 많은 정보가 필요합니다. 여기서 말하는 내용은 저에게 정확합니다. ByteArray가 아니라 Socket 클래스를 사용하여 데이터를 보냅니다.

데이터를 보내지 않았습니까? 어떻게 응답을 받고 있습니까? 그것은 잘 작동하고있을 수도 있지만 당신은 그 사실을 모르고 있습니까? 내가 말했듯이, 당신이하고있는 일에 대해 더 많이 말해주세요.

Lee Brimelow는 POP3 클라이언트를 작성하는 screencast on gotoAndLearn을 가지고 있습니다. 그것은 본질적으로 당신이하는 일과 동일합니다.

0

구문의 정확성을 100 % 확신합니까? HTTP를 사용하면 요청을받은 후 추가 줄 바꿈을 포함시켜야합니다. 그것 없이는 아무것도 얻을 수 없습니다. 그것은 FTP와 함께하는 방법을 잘 모르겠습니다.

0

FTP 표준에서는 명령이 끝나면 CRLF가 필요합니다. 귀하의 예제에서 "\ n"대신 "\ r \ n"을 사용하십시오.

0

올바르게 연결하려면 FTP 서버에서 CrossDomain 정책 파일을 제공해야합니다.

0

내가 수집 한 것부터 이동하려면 각 명령을 한 번에 하나씩 보내고 응답을 확인해야합니다. ProgressEvent.SOCKET_DATA에 대한 무언가를 되찾고 있어야합니다.

응답을 통해 무엇을 얻을 수 있는지보십시오.

socket.writeUTFBytes("USER "+user+"\n"); socket.flush(); 

다음과 같은 응답을 읽습니다.

var response:String = mySocket.readUTFBytes(mySocket.bytesAvailable); 
3

FTP 프로토콜은 UTF 인코딩보다 앞선 것입니다. 더 나은 결과를 얻으려면 ANSI/ASCII로 전환하십시오. writeUTFBytes 대신에 writeMultiByte를 선택했다면, 리눅스에서 버그가 있음을 알아 두십시오. 편도 약 Here's.

또 다른 질문은 here입니다. 줄 끝이 범인으로 밝혀 지므로 위와 같이 올바른 결과를 얻으십시오.

이전처럼 웹에서 실행 중이라면 모든 소켓 연결에는 크로스 도메인 정책이 필요하지만 HTTP를 기반으로하는 파일이 아닙니다. 보안 규칙의 최근 변경 사항은 소켓 기반 연결이 대상 호스트의 포트 843에서 호스트되는 정책 서버에서 먼저 교차 도메인을 가져와야 함을 의미합니다. 어도비에서 인용

:

SWF 파일은 더 이상 소켓 정책 파일없이 해당 도메인에 대한 소켓 연결을 만들 수 없습니다. 버전 9,0,115,0 이전에는 SWF 파일이 정책 파일없이 자체 도메인의 포트 1024 이상에 대한 소켓 연결을 허용했습니다.

HTTP 정책 파일은 더 이상 소켓 연결을 허가하는 데 사용할 수 없습니다. 버전 9,0,115,0 이전에는 포트 80의 /crossdomain.xml의 마스터 위치에서 제공되는 HTTP 정책 파일을 사용하여 동일한 호스트의 1024 이상의 모든 포트에 대한 소켓 연결을 인증 할 수있었습니다.

기본적으로 이것이 의미하는 바는 대상 FTP 호스트를 제어하고이 FTP 서버에 보완 소프트웨어를 설치해야합니다.

+0

그는이를 피하기 위해 자신의 호스트를 통과 할 수 있습니다. –

+0

나는 동의하지만, 이것이 초래할 대역폭을 감당할 수있는 위치에 없었습니다 – spender

1

this link도 읽고 아마도 this one도 유용 할 수 있습니다.

첫 번째는 정책 파일에 대한 것이고 두 번째는 TELNET (여기서는 FTP가없는) 클라이언트의 예입니다.

1

브라우저에서 작동하는 FTP 클라이언트를 얻을 수 있었지만 버그가 있습니다. Flash가 데이터를 연결하고 전송할 수 있도록 정책 파일을 서버에 포트 843에서 실행하는 수신기를 가져와야했습니다. 그런 다음 FTP가 실제로 작동하는 방식을 파악해야했습니다.

명령 소켓과 데이터 소켓 2 개를 열어야합니다. 명령 소켓은 USER, PASS, CWD 및 STOR 명령을 보내는 곳입니다. 데이터 소켓은 ByteArray 데이터를 쓸 곳입니다. PASV 명령을 보내면 데이터 소켓이 연결해야하는 포트를 알 수 있습니다.

Mac에서는 버프가 Safari와 FF에서 "socket.close()"명령을 호출하면 서버 소켓이 실제로 닫힙니다. Windoze에서는 그렇지 않습니다. SERVER가 연결을 닫을 때까지 Event.CLOSE 이벤트가 시작되지 않기 때문에 큰 문제입니다. 이것은 livedocs에 있습니다.

여기가 내가있는 곳입니다. Mac에서 완벽하게 작동하고 Windows의 3 가지 브라우저에서 완전히 파열되는 이유를 알 수 없습니다. 내가 생각해 낼 수있는 유일한 이유는 Windows 구성에서 서버와의 적절한 통신을 방해하는 것 또는 문제를 일으키는 Window Flash 플레이어라는 것입니다.

의견이 있으십니까?