ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

arduinoコミュのArduinoでFTPに挑戦・・・挫折。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして、こんにちは。Arduino初心者のueponxです。

Ethernetシールドを使ったプログラムを作ってみようと思い、ネットにはあまりサンプルのなかったFTPによるファイルのPUTを試してみようと思いました。

まずは、ファイルは「空=サイズ0」ということで実験をしてみたのですが、ファイルの生成はうまくいくのですが、FTPサーバのソフトによって結果の扱いがマチマチになってしまうようです。(プロトコルエラーとして扱われるものや、エラーを出さないものがありました。)

これをなんとかすべてのサーバで正常終了できるようにしたいと考えています。悔しくて、自分で調べてみたのですが、データポート側のstop()を行ってのクローズをしているはずの動作が出来ていない様でした。(Wiresharkで調べました。)

何か認識で間違ったところがあれば教えていただければと思います。
よろしくお願いいたします。

ソースは以下です。(汚いですが・・・)

//------ここから
#include <Ethernet.h>

byte mac[] = {
0x??, 0x??, 0x??, 0x??, 0x??, 0x?? };//適切な値を入れる
byte ip[] = {
192, 168, 0, 102 };
byte gateway[] = {
192, 168, 0, 1 };
byte subnet[] = {
255, 255, 255, 0 };

byte server_ip[] = {
192, 168, 0, 100 };

Server data_port(12345);//12345=48×256+57
Client client = Client(server_ip, 21);

void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
Serial.begin(9600);
data_port.begin();
Serial.println("connecting...");

if (client.connect()) {
Serial.println("connected");

delay(1*1000);
while(client.available()) {
char c = client.read();
Serial.print(c);
}

client.print("USER hoge\r\n");
Serial.print("USER hoge\r\n");

delay(1*1000);
while(client.available()) {
char c = client.read();
Serial.print(c);
}

client.print("PASS fuga\r\n");
Serial.print("PASS fuga\r\n");

delay(1*1000);
while(client.available()) {
char c = client.read();
Serial.print(c);
}

client.print("PORT 192,168,0,102,48,57\r\n");//48,57 = 12345
Serial.print("PORT 192,168,0,102,48,57\r\n");

delay(1*1000);
while(client.available()) {
char c = client.read();
Serial.print(c);
}

client.print("STOR log.txt\r\n");
Serial.print("STOR log.txt\r\n");

delay(1*1000);
while(client.available()) {
char c = client.read();
Serial.print(c);
}

delay(1*1000);

Client DClient = data_port.available();
DClient.stop(); // <<<<ここでクローズされていない模様?

delay(1*1000);
while(client.available()) {
char c = client.read();
Serial.print(c);
}

client.print("QUIT\r\n");
Serial.print("QUIT\r\n");

while(client.available()) {
char c = client.read();
Serial.print(c);
}

client.stop();

}
else {
Serial.println("connection failed");
}
}

void loop()
{
}

//-----ここまで

コメント(0)

mixiユーザー
ログインしてコメントしよう!

arduino 更新情報

arduinoのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング