免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3189 | 回复: 2
打印 上一主题 下一主题

请问用boost如何写个与flash进行socket通行的服务器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-23 11:46 |只看该作者 |倒序浏览
小弟搞C++经验不足,最近想用boost.asio来做一个和flash通行的服务器,没有足够的C++经验就做socket服务器真是难哪,难哪!
我的代码如下:

#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

std::string make_daytime_string()
{
  using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  return ctime(&now);
}

int main()
{
  try
  {
    boost::asio::io_service io_service;

    tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 3099));
    std::string flash_str = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"1025-29999\"/></cross-domain-policy>\0";
    //boost::asio::mutable_buffers_1 flash_response(&flash_str, flash_str.length());
    //boost::array<char, 128> flash_response = {'<','c','r','o','s','s','-','d','o','m','a','i','n','-','p','o','l','i','c','y','>','<','a','l','l','o','w','-','a','c','c','e','s','s','-','f','r','o','m',' ','d','o','m','a','i','n','=','"','*','"',' ','t','o','-','p','o','r','t','s','=','"','1','0','2','5','-','2','9','9','9','9','"','/','>','<','/','c','r','o','s','s','-','d','o','m','a','i','n','-','p','o','l','i','c','y','>'};
   
   

    for (; ; )
    {
      tcp::socket socket(io_service);
      acceptor.accept(socket);

      std::string message = make_daytime_string();
      boost::array<char, 128> buf;
      boost::asio::streambuf b;

      boost::system::error_code ignored_error;
      size_t len = boost::asio::read(socket, boost::asio::buffer(buf),
          boost::asio::transfer_all(), ignored_error);

      if (len > 0) {
        std::string rs = std::string(buf.data());
      
        if ("<policy-file-request/>" == rs.substr(0, len)) {
          std::cerr << "flash request\n";
          // 回写flash的连接验证字符串
          boost::asio::write(socket, boost::asio::buffer(flash_str),
              boost::asio::transfer_all(), ignored_error);
          std::cerr << "writed back to flash\n";
        }
        else
        {
          boost::asio::write(socket, boost::asio::buffer(buf /* message */),
              boost::asio::transfer_all(), ignored_error);
        }
        
        std::cerr.write(buf.data(), len);
        std::cerr << '\n';
      }
    }
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}


上面的代码是我用boost.asio的tutorial改写滴,代码有点烂,大家不要笑话喔!

我的问题是当flash与服务器建立连接时,我通过std::cerr也能够把相关的请求字符串打印出来,而且我也把
“<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"1025-29999\"/></cross-domain-policy>”
这个字符串写回了flash,但就是没有连接上。

在google上转了一圈,什么也没有看到。

请各位高人指教。

论坛徽章:
0
2 [报告]
发表于 2009-09-23 14:04 |只看该作者
我用php写了一个客户端,发现是服务端没有返回应答到客户端,不知道这是不是因为没有用异步读写函数async_read_some()和async_write_some()的原因。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
3 [报告]
发表于 2009-09-25 15:39 |只看该作者
不会boost,直接建立链接通信吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP