- 论坛徽章:
- 0
|
小弟搞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上转了一圈,什么也没有看到。
请各位高人指教。
 |
|