2005 年 12 月 27 日 18 時 18 分

FTP プロキシの実装


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


やっと実装に入れる。

ネットワークプログラミングなので、
同じコンピュータでテストしても面白くない。
そこでプロキシ用にコンピュータを用意した。

まず必要なのが、クライアントの通信を待機するソケット。
ポートは 2121 にしよう。なお、IP は、192.168.0.111 だ。

sockaddr_in を準備。ここは普通の C コード
(クラス化してもいいんだけど……構想中。)

    sockaddr_in addr;
    memset(&addr, 0, sizeof(sockaddr_in));
    addr.sin_family = AF_INET;
    addr.sin_port   = htons(2121);
    addr.sin_addr.s_addr = inet_addr("192.168.0.111");

ソケットを作成し、Bind/Listen。

    auto_ptr<Socket> listener(new Socket(AF_INET, SOCK_STREAM, 0));

    // Bind はオーバーロードしてます。
    listener->Bind(sockaddr);
    listener->Listen(5);

後はクライアントを待ち受けるだけ。
テストなので、421 Service not available. を返します。
プロキシはエラーが起きない限り終了しません(笑)

    for (;;) {
        // Accept もオーバーロードしてます。
        auto_ptr<Socket> client(listener->Accept());
        // Send もオ(以下略)
        client->Send("421 Service not available.\x0d\x0a");
    }

FFFTP で接続。OK 動いた。
…といっても、すぐに切断されることを確認しただけだけど。

クラス化しておくと後が楽やね。
明日はプロキシとしてサーバにつないでみよう。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.