最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)同步模式下的端口映射程序

 更新時(shí)間:2022年06月16日 16:49:03   作者:天方  
這篇文章介紹了C#實(shí)現(xiàn)同步模式下的端口映射程序,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

今天打算寫(xiě)一個(gè)FtpServer玩一下的,需要看看ftp軟件常用命令形式(完整實(shí)現(xiàn)所有ftp命令太麻煩),最開(kāi)始打算通過(guò)抓包看cuteftp是如何訪問(wèn)ftpserver的,但要把其中的命令保存下來(lái)還得一條條復(fù)制,太麻煩,便通過(guò)proxy模式寫(xiě)了一個(gè)代理程序,來(lái)獲取其交互的命令,寫(xiě)了一個(gè)簡(jiǎn)單的同步模式下的端口映射程序后,發(fā)現(xiàn)比常用的異步proxy要簡(jiǎn)單的多,便把這段代碼貼出來(lái),以備日后查詢(xún):

class Program
{
    static void Main(string[] args)
    {
        TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Loopback, 8000));
        listener.Start();
        while (true)
        {
            var client = listener.AcceptTcpClient();

            Console.WriteLine("connected");
            var proxy = new TcpClient();
            Console.WriteLine("remote connected");
            proxy.Connect(new IPEndPoint(IPAddress.Loopback, 21));

            new SyncProxy("client->remote",proxy.GetStream(), client.GetStream());
            new SyncProxy("remote->client",client.GetStream(), proxy.GetStream());
        }
    }
}

class SyncProxy
{
    NetworkStream read;
    NetworkStream write;
    string name;

    public SyncProxy(string name, NetworkStream read,NetworkStream write)
    {
        this.name = name;
        this.read = read;
        this.write = write;

        System.Threading.ThreadPool.QueueUserWorkItem(PipeStream);
    }

    void PipeStream(object state)
    {
        byte[] buffer = new byte[1500];
        int count = 0;
        while (true)
        {
            try
            {
                count = read.Read(buffer, 0, buffer.Length);
            }
            catch (Exception)
            {
                count = 0;
            }

            if (count == 0)
            {
                Console.WriteLine(name+" closed");
                write.Close();
                break;
            }

            Console.Write(name + ": "+ Encoding.Default.GetString(buffer, 0, count));
            write.Write(buffer, 0, count);
        }
    }
}

通過(guò)它獲取到的cuteFtp交互命令如下:

connected
remote connected
client->remote: 220 Serv-U FTP Server v6.0 for WinSock ready...
remote->client: USER 1
client->remote: 331 User name okay, need password.
remote->client: PASS 1
client->remote: 230 User logged in, proceed.
remote->client: PWD
client->remote: 257 "/" is current directory.
remote->client: FEAT
client->remote: 211-Extension supported
client->remote: CLNT
MDTM
MDTM YYYYMMDDHHMMSS[+-TZ];filename
SIZE
SITE PSWD;EXEC;SET;INDEX;ZONE;CHMOD;MSG
REST STREAM
XCRC filename;start;end
MODE Z
211 End
remote->client: REST 0
client->remote: 350 Restarting at 0. Send STORE or RETRIEVE.
remote->client: PASV
client->remote: 227 Entering Passive Mode (127,0,0,1,29,18)
remote->client: LIST
client->remote: 150 Opening ASCII mode data connection for /bin/ls.
client->remote: 226 Transfer complete.

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • WinForm的延時(shí)加載控件概述

    WinForm的延時(shí)加載控件概述

    這篇文章主要介紹了WinForm的延時(shí)加載控件,很實(shí)用的技巧,在C#程序設(shè)計(jì)中有著比較廣泛的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • C#線程入門(mén)教程之單線程介紹

    C#線程入門(mén)教程之單線程介紹

    這篇文章主要介紹了C#線程入門(mén)教程之單線程介紹,本文講解了什么是進(jìn)程、什么是線程、什么是多線程等內(nèi)容,并給出了一個(gè)單線程代碼示例,需要的朋友可以參考下
    2015-02-02
  • C#通過(guò)GET/POST方式發(fā)送Http請(qǐng)求

    C#通過(guò)GET/POST方式發(fā)送Http請(qǐng)求

    本文主要介紹了C#實(shí)現(xiàn)http請(qǐng)求的兩種方式,get和post方式。文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#中的尾遞歸與Continuation詳解

    C#中的尾遞歸與Continuation詳解

    這篇文章主要介紹了C#中的尾遞歸與Continuation詳解,本文講解了遞歸與尾遞歸、尾遞歸與Continuation、Continuation的改進(jìn)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#讀寫(xiě)Config配置文件案例

    C#讀寫(xiě)Config配置文件案例

    這篇文章介紹了C#讀寫(xiě)Config配置文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 利用C#實(shí)現(xiàn)分割GIF圖片

    利用C#實(shí)現(xiàn)分割GIF圖片

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)分割GIF圖片的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • c#調(diào)用jar包的方法步驟(非常詳細(xì))

    c#調(diào)用jar包的方法步驟(非常詳細(xì))

    這篇文章主要給大家介紹了關(guān)于c#調(diào)用jar包的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#操作ftp類(lèi)完整實(shí)例

    C#操作ftp類(lèi)完整實(shí)例

    這篇文章主要介紹了C#操作ftp類(lèi),以一個(gè)完整實(shí)例形式詳細(xì)分析了C#操作FTP文件傳輸所涉及的FTP連接、文件傳輸、參數(shù)設(shè)置、文件刪除等技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#中的委托delegate用法的示例詳解

    C#中的委托delegate用法的示例詳解

    這篇文章主要介紹了C#中的委托用法的示例詳解。本章將由淺入深地講述什么是委托、為什么要使用委托、事件的由來(lái)、.NET Framework 中的委托和事件、委托中方法異常和超時(shí)的處理、委托與異步編程、委托和事件對(duì)Observer 設(shè)計(jì)模式的意義。感興趣的可以了解一下
    2020-07-07
  • c# 實(shí)現(xiàn)RSA非對(duì)稱(chēng)加密算法

    c# 實(shí)現(xiàn)RSA非對(duì)稱(chēng)加密算法

    RSA解決了對(duì)稱(chēng)加密的一個(gè)不足,比如AES算法加密和解密時(shí)使用的是同一個(gè)秘鑰,因此這個(gè)秘鑰不能公開(kāi),因此對(duì)于需要公開(kāi)秘鑰的場(chǎng)合,我們需要在加密和解密過(guò)程中使用不同的秘鑰,加密使用的公鑰可以公開(kāi),解密使用的私鑰要保密,這就是非對(duì)稱(chēng)加密的好處?!?/div> 2021-06-06

最新評(píng)論

多伦县| 廊坊市| 澳门| 锡林浩特市| 泸西县| 合肥市| 莱西市| 辰溪县| 莎车县| 进贤县| 庐江县| 绥芬河市| 红河县| 陆河县| 拉孜县| 桂阳县| 体育| 台南县| 策勒县| 乌拉特后旗| 南澳县| 平乐县| 玉山县| 启东市| 元江| 谢通门县| 红河县| 获嘉县| 大连市| 延安市| 郸城县| 固阳县| 甘泉县| 岳阳市| 报价| 若尔盖县| 高州市| 增城市| 宜黄县| 乌兰县| 昆明市|