草庐IT

ZN5boost

全部标签

c++ - 如何在异步 boost 中只读取一个数据包数据?

我有一个tcp客户端需要通过tcp读取数据但是我每次需要读取一个tcp包数据。我使用这段代码:socket_[socket_index]->async_receive(boost::asio::buffer(buf,max_size),boost::bind(&pipe::handle_read,shared_from_this(),boost::asio::placeholders::error,socket_index,boost::asio::placeholders::bytes_transferred));但有时我读取了多个数据包。我需要如何将其更改为只读取一个数据包数据?

c++ - boost - ASIO 与 IOStreams TCP

我是Boost的新手。我一直在为sokcets/网络/TCP东西寻找一个简单的跨平台解决方案,并找到了Boost。快速浏览一下,似乎有两个TCP相关类:一个在Iostreams中,一个在Asio中。我(非常)确定,如果我深入研究这两个库的相应文档,我将能够弄清楚每个库的用途,但是有人可以简短地解释一下区别是什么,或者每个库的用途是什么吗? 最佳答案 Boost.Iostreams中有TCP流吗?ASIO是一个完整的全功能网络库,支持使用通用回调API的异步I/O。ip::tcp::iostream类(它是ASIO的一部分)构建在AS

c++ - boost:asio::async_write:已发送数据但未调用处理程序

我有以下类定义://SocketTypeTmaybee.g.'boost::asio::ip::tcp::socket'templateclassSocket:publicSocketTypeT,publicboost::enable_shared_from_this>{[...]在这个类中,我有以下方法“writeAsync”:voidwriteAsync(conststd::string&strData){boost::asio::async_write(*this,boost::asio::buffer(strData),boost::bind(&Socket::handle_w

c++ - boost::asio::ip::tcp::socket - 如何绑定(bind)到特定的本地端口

我正在制作一个客户端套接字。为了让我的测试人员更轻松,我想指定套接字将使用的网卡和端口。昨天,在我的谷歌搜索中,我发现:Bindingboostasiotolocaltcpendpoint通过执行打开、绑定(bind)和async_connect,我能够绑定(bind)到特定的网卡,并且我开始在Wireshark中看到流量。但是,Wireshark报告套接字已分配给一个随机端口,而不是我指定的端口。我认为如果端口正在使用中,它会填写传递给绑定(bind)方法的error_code。我做错了什么?这是我的最小示例,是从我的实际解决方案中提取和编辑的。//BoostIncludes#inc

c++ - boost::asio 允许在连接处理程序阻塞时非阻塞地接受新连接

非常简短的总结:我正在使用boost::asio实现一个简单的TCP服务器,它允许非阻塞地接受新连接。在处理新连接的逻辑中,将执行许多可能需要几分钟的工作。特别是,我将开始一个新进程并等待它完成,同时读取标准输入、标准错误及其返回代码。只是想象一下,我想为每个连接启动g++,编译几个源文件并获取构建信息。虽然g++在单独的进程中运行,但我仍然希望能够接受新连接。我是boost::asio的新手,正在寻找一些设计建议和我当前想法的输入。选项#1:为每个连接使用一个线程并将其分离#include#include"tcp_connection.hpp"#include#includeusin

C++ Linux Google Protobuf + boost::asio 无法解析

我正在尝试通过TCP通过boost::asio套接字发送GoogleProtobuf消息。我认识到TCP是一种流式传输协议(protocol),因此我在消息通过套接字之前对其执行长度前缀。我有代码工作,但它似乎只在某些时候工作,即使我重复相同的调用而不改变环境。有时我会收到以下错误:[libprotobufERRORgoogle/protobuf/message_lite.cc:123]Can'tparsemessageoftype"xxx"becauseitismissingrequiredfields:Name,ApplicationType,MessageType原因很容易理解,

javascript - Boost::asio::async_read_until 从不调用处理程序

我正在尝试在本地网络上的两台计算机之间建立连接,一台使用BoostAsioC++TCP异步服务器示例的略微修改版本,另一台使用NodeJS。tcp_client.js:varnet=require('net');varHOST='127.0.0.1';varPORT=14002;varclient=newnet.Socket();client.connect(PORT,HOST,function(){console.log('CONNECTEDTO:'+HOST+':'+PORT);//Writeamessagetothesocketassoonastheclientisconnect

c++ - 使用 boost 异步发送和接收自定义数据包?

我正在尝试使用boost异步发送和接收自定义数据包,根据我当前的实现,我有一些问题:tcpclient.cpp#include"tcpclient.h"#include#include"../utils/logger.h"tcpclient::tcpclient(std::stringhost,intport):_endpoint(boost::asio::ip::address::from_string(host),port),_socket(_ioservice){logger::log_info("Initiatingclient...");}voidtcpclient::sta

c++ - async_connect 在 boost::asio 中阻塞 io_service::run_one()

我正在尝试运行以下代码:some_sock.async_connect(...);//handle_connect()setsthe'condition'flagboost::asio::deadline_timert(ios,boost::posix_time::seconds(2));while(t.expires_from_now()>=boost::posix_time::seconds(0)){ios.run_one();if(condition)return;}理想的行为是在计时器t到期后(2秒后)从run_one()返回。实际上,run_one()会阻塞,直到收到SYN-

c++ - Boost Asio - 服务器没有收到消息

我正在开发一款3d(第一人称/第三人称)游戏,我正在尝试使用TCP套接字使其成为多人游戏。为此,我正在使用boostasio库,但我有点不知所措。我在boostasio文档页面上玩了一些教程和示例,它们编译/运行/工作得很好,我只是对一切如何工作有点困惑。现在我只是想让服务器接受来自客户端的消息,并在收到消息后打印出来。当我执行下面的代码时(编译/链接/运行正常),没有任何反应。更具体地说,客户端似乎成功发送了消息,而服务器似乎从未收到消息。客户端代码:ClientFramework::ClientFramework():mResolver(mIOService){}boolClien