Chinaunix

标题: 请问用boost如何写个与flash进行socket通行的服务器 [打印本页]

作者: kytexzy    时间: 2009-09-23 11:46
标题: 请问用boost如何写个与flash进行socket通行的服务器
小弟搞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上转了一圈,什么也没有看到。

请各位高人指教。

作者: kytexzy    时间: 2009-09-23 14:04
我用php写了一个客户端,发现是服务端没有返回应答到客户端,不知道这是不是因为没有用异步读写函数async_read_some()和async_write_some()的原因。


作者: nizvoo    时间: 2009-09-25 15:39
不会boost,直接建立链接通信吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2