采用异步网络通信,boost::udp 客户端读不到数据

上海老李 2010-01-28 04:04:39
构造函数
udp_client(boost::asio::io_service& io_service__,std::string strip,std::string strport,std::size_t max_message_length)
:io_service_(io_service__),
s(io_service__, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(),0 )),
resolver_(io_service__),
query_(udp::v4(), strip,strport),
iterator_(resolver_.resolve((query_))),
strand_(io_service__)
{
boost::asio::socket_base::receive_buffer_size receive_buffer_size(64 * 1024 * 1024);
s.set_option(receive_buffer_size);
start_read();
}

读:
void receive(const boost::system::error_code& error, std::size_t bytes_transferred)
{

std::cout << "handle_read: " << bytes_transferred << std:: endl;
std::cout << readmsg.base() << std::endl;

start_read();
}
void start_read()
{
std::cout << "start reading" << std::endl;
// s.async_receive(boost::asio::buffer(readmsg.wr_ptr(),max_message_length_),
// strand_.wrap(
// boost::bind(&udp_client::receive, this,
// boost::asio::placeholders::error,
// boost::asio::placeholders::bytes_transferred)));

s.async_receive_from(boost::asio::buffer(readmsg.wr_ptr(), max_message_length_), recv_endpoint,
strand_.wrap(
boost::bind(&udp_client::receive, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
}
以上是客户端的,而服务器则是指定端口的,在用tcpview看时,客户端的端口是打开的,但是收数据时,总是收不到,读到的数据一直为0,buffer内也是空的,有哪位遇到过吗?
...全文
366 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
上海老李 2010-01-28
  • 打赏
  • 举报
回复
是收到了,应是有个bug,readmsg是一个仿ace的message_block,就是不知为什么在服务器中可以,在客户端不行,这个需要查查,我试了直接用char buff[];读是可以读到了,谢谢大家
luoweisong 2010-01-28
  • 打赏
  • 举报
回复
先使用一个接收UDP数据的程序来验证服务器是否真的发出了数据

会不会是这个错了呢:s.set_option(receive_buffer_size);


这个是什么:readmsg.wr_ptr() 他智能指针?



lovesi3344 2010-01-28
  • 打赏
  • 举报
回复
帮顶

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧