0

C#でTCPソケットをいじっていますが、セットアップしたFTPサーバーとの通信に問題があります。最初に接続して220メッセージを受け取ることはできますが、「USER nrcrast」コマンドを送信すると、応答が得られず、DataAvailableプロパティがfalseを返します。誰かが私が間違っていることを知っていますか?これまでの私のコードは次のとおりです。

namespace TCPClient
{
public partial class TCPClientForm : Form
{


    private TcpClient myClient;
    NetworkStream stream;

    public TCPClientForm()
    {
        InitializeComponent();
        send();

    }

    void send()
    {

        while (true)
        {
            try
            {
                myClient = new TcpClient("nrcrast.dyndns.info", 21);
                break;
            }
            catch (SocketException ex)
            {
                Console.WriteLine(ex.ToString());
            }

        }
        stream = myClient.GetStream();
        int sendOffset = 0;
        int recOffset=0;

        int dataLength;
        Byte[] receiveData = new Byte[256];


        // wait for a response
        dataLength = stream.Read(receiveData, recOffset, receiveData.Length);
        String recvdMessage = System.Text.Encoding.ASCII.GetString(receiveData, 0, dataLength);
        Console.WriteLine(recvdMessage.ToString());
         recOffset+=dataLength;


        String message = "USER nrcrast";
        Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
        stream.Write(data, 0, data.Length);
        sendOffset += data.Length;

        // wait for a response
        while (!stream.DataAvailable)
        {
        }
        dataLength = stream.Read(receiveData, 0, receiveData.Length);
        recvdMessage = System.Text.Encoding.ASCII.GetString(receiveData, 0, dataLength);
        Console.WriteLine(recvdMessage.ToString());


    }


}
4

2 に答える 2

1

同様のプロジェクトで誰かの肩越しに調べることに興味がある場合 (完璧とは言いません)、私はずっと前に同じことをしました (これは .net 1.1 に戻って、ssl ストリームがものが追加されました)。

コマンドを送信するタイミング、サーバーがデータ接続を開くことを期待するタイミング、サーバーの応答を読み取るタイミングなど (アクティブ/パッシブ モードに応じて) に関して、FTP プロトコルにはいくつかのトリッキーな部分があります。

いずれにせよ、独自の実装を行う際には、参照用にMy FTP Client Libraryのソース コードを自由に参照してください。これはかなり完全な実装であり、auth ssl/tls も行います。

于 2012-04-12T21:48:42.473 に答える