yyt_hac's web

软件开发,编程,计算机技术,工具软件

YFtpServer--------一个用boost实现的ftp服务器

      最近尝试用boost库进行跨平台编程,写了一个ftp服务器,基本可以做到一份核心代码,各个平台通用(主要包括安卓,IOS,windows,linux等),界面部分各个平台需要分别实现。

       主要使用了std::wstring和boost::filesystem::path来处理字符串和文件路径,在发给ftp客户端时统一转化成UTF8编码,在使用

boost::filesystem::path处理中文文件名和路径的过程中,发现在安卓上出现乱码,比如path(L"c:\\测试").generic_wstring()返回的就是乱码,最后修改了boost库的path.hpp文件,修改内容如下:

template <class U> inline

void my_dispatch(const std::string& c, U& to)

{

if (c.size())

{

std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> conv;

# ifdef BOOST_WINDOWS_API

to = conv.from_bytes(c);

#else

to = c;

#endif

}

}


template <class U> inline

void my_dispatch(const std::wstring& c, U& to)

{

if (c.size())

{

std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> conv;

# ifdef BOOST_WINDOWS_API

to = c;

#else

to = conv.to_bytes(c);

#endif

}

}


    template <class Source>

    path(Source const& source,

      typename boost::enable_if<path_traits::is_pathable<

        typename boost::decay<Source>::type> >::type* =0)

    {

      //path_traits::dispatch(source, m_pathname);

    my_dispatch(source, m_pathname);

    }

增加了2个my_dispatch模板函数,把path_traits::dispatch(source, m_pathname)改成my_dispatch(source, m_pathname);

这样修改之后,boost::filesystem::path处理中文就正常了。


编译了windows版、linux版、安卓版:

windows版下载地址:

yftpserver.exe (841KB)

centos 7 64位版下载地址:

yftpserver.ZIP (4.7MB)

安卓版下载地址:

yftpserver.apk (519.2KB)

安卓版截图:





评论 (1) -

  • 黑客大叔

    2017-2-21 12:03:57 | 回复

    看着这篇文章感觉蛮熟悉的,之前好像在某个网站看到过,而且还比较详细,大家可以去这个网站看下,里面有很多黑客的网站,大家可以百度下这个网站,黑客之门。http://www.hackerdoor.com/

Loading

浙公网安备 33010802005082号

浙ICP备15018881号