위즈네트 아카데미

TUTORIAL

튜토리얼

Home  > 튜토리얼

Wireless WizFi250을 활용 FTP 서버에 파일 업로드하기

WIZnet Academy 2014.10.21 13:35 조회 수 : 14

WizFi250이 FTP Client 로 동작하면서 FTP 서버에 파일을 업로드 하는 방법에 대해서 설명하겠습니다.

WizFi250 을 AT 커맨드로 제어, FTP 서버에 로그인, 20Byte 사이즈의 로그파일(a.txt) 을 업로드하는 과정입니다. 테스트에 사용된 FTP 서븐 <ProFTPD1.3.4a> 이고 RC959에 나와있는 내용을 참조로 최소한의 명령어를 사용하였습니다.

☞ RFC959에 대한 상세 사항 보기

FTP 서버 로그인에 사용된 USER, PASS 명령어 (4.1.1. ACCESS CONTROL COMMANDS) 를 제외하고, 테스트에 사용된 주요 FTP Control Command 들과 실제 구현 예제에 대해서 살펴봅니다.

(1) 데이터는 Binary 모드

[sourcecode language="plain"]
REPRESENTATION TYPE (TYPE)

The argument specifies the representation type as described
in the Section on Data Representation and Storage. Several
types take a second parameter. The first parameter is
denoted by a single Telnet character, as is the second
Format parameter for ASCII and EBCDIC; the second parameter
for local byte is a decimal integer to indicate Bytesize.
The parameters are separated by a space (Space, ASCII code
32).

(RFC959 4.1.2. TRANSFER PARAMETER COMMANDS)
[/sourcecode]

(2) 실무에서 방화벽이나 공유기 문제로 정상 동작하지 않는 FTP Active mode 대신에 FTP Passive mode로

[sourcecode langunage="plain"]
DATA PORT (PORT)

The argument is a HOST-PORT specification for the data port
to be used in data connection. There are defaults for both
the user and server data ports, and under normal
circumstances this command and its reply are not needed. If
this command is used, the argument is the concatenation of a
32-bit internet host address and a 16-bit TCP port address.
This address information is broken into 8-bit fields and the
value of each field is transmitted as a decimal number (in
character string representation). The fields are separated
by commas. A port command would be:

PORT h1,h2,h3,h4,p1,p2

(RFC959 4.1.2. TRANSFER PARAMETER COMMANDS)
[/sourcecode]

여기에서 P1, P2가 16bit TCP Port address의 2Byte를 의미하므로 계산식은 아래와 같습니다.

[sourcecode language="plain"]
(256 * p1) + p2 = FTP Data Port
[/sourcecode]

즉, 아래 예제처럼 FTP 서버가 아래의 데이터를 보낸다면,

[sourcecode language="plain"]
227 Entering Passive Mode (222,98,xxx,xxx,194,23)
[/sourcecode]

WizFi250은 데이터 전송을 위한 포트로 (256*194) + 23 = 49687을 사용하면 됩니다.

(4)FTP 서버에 File Upload

[sourcecode language="plain"]
STORE (STOR)

This command causes the server-DTP to accept the data
transferred via the data connection and to store the data as
a file at the server site. If the file specified in the
pathname exists at the server site, then its contents shall
be replaced by the data being transferred. A new file is
created at the server site if the file specified in the
pathname does not already exist.

(RFC959 4.1.3. FTP SERVICE COMMANDS)
[/sourcecode]

(5)실제 구현 로그

[sourcecode language="plain"]
WizFi250 Version 1.0.1.8 (WIZnet Co.Ltd)
AT+WSET=0,WizFiDemoAP
[OK]
AT+WSEC=0,,123456789
[OK]
AT+WNET=1
[OK]
AT+WJOIN
Joining : WizFiDemoAP
Successfully joined : WizFiDemoAP

[Link-Up Event]
IP Addr : 192.168.3.138
Gateway : 192.168.3.1
[OK]
(WizFi210 Association 하기)

AT+SCON=O,TCN,222.98.xxx.xxx,21,0,0

[CONNECT 0]
[OK]
{0,222.98.xxx.xxx,21,54}220 ProFTPD 1.3.4a Server (Debian) [::ffff:10.0.1.2]
(Control Port에 소켓 ID 0으로 접속되었다.)

AT+SSEND=0,,,12
[0,,,12]
(여기에서 "USER xxxxxx{0x0A}" 12 Byte를 전송한다.)
[OK]
{0,222.98.xxx.xxx,21,34}331 Password required for wiznet

AT+SSEND=0,,,12
[0,,,12]
(여기에서 "PASS xxxxxx{0x0A}" 12 Byte를 전송한다.)
[OK]
{0,222.98.xxx.xxx,21,27}230 User wiznet logged in


AT+SSEND=0,,,7
[0,,,7]
(여기에서 "TYPE I{0x0A}" 7 Byte를 전송한다.)
[OK]
{0,222.98.xxx.xxx,21,19}200 Type set to I

AT+SSEND=0,,,5
[0,,,5]
(여기에서 "PASV{0x0A}" 7 Byte를 전송한다.)
[OK]
{0,222.98.xxx.xxx,21,51}227 Entering Passive Mode (222,98,xxx,xxx,194,23)

(이제, FTP Data 전송을 위한 Connection을 한다. IP : 222.98.xxx.xxx Port : 49687 => (256*194) + 23)

AT+SCON=O,TCN,222.98.xxx.xxx,49687,0,0
[OK]

[CONNECT 1]
(Data Port에 소켓 ID 1로 접속되었다.)
AT+SSEND=0,,,11
[0,,,11]
(여기에서 "STOR a.txt{0x0A}" 11 Byte를 전송한다.)
[OK]
{0,222.98.xxx.xxx,21,51}150 Opening BINARY mode data connection for a.txt

AT+SSEND=1,,,20
(자, 이제 Data 포트로 실제 파일 데이터 20 Byte를 전송한다.)
[1,,,20]
[OK]

(전송이 끝나면, FTP Control Connection와 Data Connection을 모두 종료한다.)

AT+SMGMT=ALL

[DISCONNECT 0]

[DISCONNECT 1]
[OK]
[/sourcecode]

이제, FTP 서버에 접속하여, ls를 해보면 20byte의 a.txt 파일이 전송된 것을 확인할 수 있습니다.

RFC959에는 이 외에도 몇가지 FTP 커맨드를 지원하는데 이를 이용하면 보다 다양한 FTP 기능을 구현할 수 있습니다.

[sourcecode language="plain"]
CWD - change working directory
MKD - make a remote directory
LIST - list remote files
RETR - retrieve a remote file
SIZE - return the size of a file
DELE - delete a remote file
...........................

(RFC959 5.3.1. FTP COMMANDS)
[/sourcecode]

아래는 관련 동영상입니다.


☞ 출처 : IoT WiFi This+