ブログ

割とコンピュータよりの情報をお届けします。

2018/07/8

先のFTPクライアントをC#で作り直してみた

先ほどのPythonでFTPサーバを作ってみた件について一緒に書いていたクライアントの部分をC#で書き直してみた。

この程度の実装ならC#の方が簡単。

ただし,WebClientを使用するところが非常に特徴的である。
ちなみに,2つファイルを作ってしまっているが,一つ目はファイルを転送したもの,二つ目はメモリからバイト列をファイルへ転送したもの。

using System.Text;

namespace FTP
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Net.WebClient client = new System.Net.WebClient();
            client.Credentials = new System.Net.NetworkCredential("user", "password");

            // ファイルを転送する場合。
            client.UploadFile("ftp://localhost/test4.txt", "test2.txt");

            // メモリから直接文字列を転送する場合。
            string str = "これはテストの文字列です";
            byte[] bytes = Encoding.UTF8.GetBytes(str); 
            client.UploadData("ftp://localhost/test5.txt", bytes);
            client.Dispose();
        }
    }
}

当然Syste.Net.WebClientを使用しているのでftpに限らずhttpの利用も想定できると思うが…

≫ Read More

2018/07/08 コンピュータ   TakeMe

PythonでFTPサーバーを立ててみる

Pythonで開発用のftpサーバを用意してみた。

Pythonで開発用のftpサーバを簡単に作る方法を探していると,以下のようなコードが上がった。

ユーザ名 user
パスワード password
でダミーのユーザを作成。

import pyftpdlib.authorizers
import pyftpdlib.handlers
import pyftpdlib.servers
import os

# スクリプトのファイルのあるフォルダのfolderフォルダを
# ユーザルートにする
srvRoot = os.path.dirname(__file__) + '\\folder';

auth = pyftpdlib.authorizers.DummyAuthorizer()
auth.add_user('user', 'password', srvRoot, perm='elradfmw')

hndler = pyftpdlib.handlers.FTPHandler
hndler.authorizer = auth

server = pyftpdlib.servers.FTPServer(("0.0.0.0", 21), hndler)

try:
    server.serve_forever();
except KeyboardInterrupt:
    print('interrupted!')

クライアントを作成してみる。といっても接続してファイルをアップロードしてみるだけのプログラムだけど…

from ftplib import FTP

ftp = FTP(
    "localhost",
    "user",
    passwd="password"
)

# ファイルのアップロード(テキスト).
with open("test2.txt", "rb") as f:
    ftp.storlines("STOR /test2.txt", f)

ftp.quit();

例えば,このプログラムを定期的にプログラムを実行すれば定期的にアップロードできる。

ただし,この例ではtest2.txtファイルを一度用意しないといけない。
そこでいwith open......の部分は以下のように変えておくと,文字列を直接ftpサーバのtest3.txtファイルに書き込むことができる。

from io import BytesIO
sample_bytes=bytes('これはテストのバイト列です','utf-8')
f = BytesIO(sample_bytes)
ftp.storlines("STOR /test3.txt", f)

≫ Read More

2018/07/08 コンピュータ   TakeMe