草庐IT

dispatch_async

全部标签

c++ - asio::tcp::socket 的async_read_some 和async_receive 有什么区别?

有什么区别:boost::asio::tcp::socket::async_read_some()boost::asio::tcp::socket::async_receive()据我所知,他们的文档是相同的。我应该选择哪个? 最佳答案 我认为两者本质上是相同的。它们同时提供两者的原因是提供类似于iostream(具有read_some成员)和套接字(具有receive)的接口(interface)。正如PeterTseng指出的那样,async_receive也有一个接受socket_base::message_flags的重载,

java - Async Boost 写入 Java Socket - 传入字节数组有时部分为 0?

我有一些C++代码正在写入Java程序正在读取的套接字。C++程序使用boost::async_write传输字节,然后由Java程序读取。async_write调用的前4个字节对应于底层数据段的大小。由于大小由该header明确确定,因此Java代码可以使用BufferedInputStream的“读取”方法填充实际数据大小的字节数组。虽然这似乎几乎每次都能正常工作,但有时InputStream读取的字节数组包含其缓冲区末尾的清零数据。每50000条消息中大约有1条以这种方式“损坏”。缓冲区中清零数据开始的位置各不相同。尽管我可以捕捉到这一点并抛出消息,但我想知道这是否是预期的表现?

Perl IO::Socket::INET + IO::Async::Stream 断开连接时重新连接到 TCP 服务器

对于我来说,我似乎无法弄清楚如何在断开连接后重新连接标准TCP套接字连接,尤其是在IO::Async::Loop的上下文中一些基础知识:#!/usr/bin/perlusestrict;usewarnings;useSocket;useIO::Async::Loop;useIO::Async::Stream;useIO::Socket;useTime::HiResqw(usleep);#standardeventloopmy$loop=IO::Async::Loop->new;#notificationservicesocketconnection;weonlywriteoutgoin

c++ - Boost asio async_read_until 在匹配条件下停止阅读

我有一个关于使用boostasio的async_read_until的一般性问题。文档说调用处理程序时缓冲区内可能有更多数据。有没有什么办法可以解决这个问题,并在序列条件匹配后立即阻止缓冲区从套接字中消耗字节? 最佳答案 Q.Isthereanywaytoworkaroundthis不是直接的,因为网络流量的工作方式(它是面向数据包的)。当然,如果发送方主动确保它,您可能在协议(protocol)边界上得到东西,但这对于流协议(protocol)来说是不寻常的。Q.andstopthebufferfromconsumingbytes

c++ - Boost asio async_read_until 然后是 async_read

我使用了来自boost的异步tcp服务器示例,它与我的应用程序正在做的很接近。下面的代码示例是一个完整的示例。首先,我开始异步读取操作,直到分隔符char。在这种情况下,它是httpheader的完整序列。该请求包含一些有效负载,即“helloworld”(11字节)。作为一个简化示例,我在这里使用了lambda处理程序。第一个处理程序被称为长度为148的header,其中包含用于定界符序列的四个字节。缓冲区的大小为159,这是包括负载在内的整个请求。到目前为止,一切都按预期进行。为了接收有效负载,我调用了另一个异步读取操作,但从未调用处理程序。我首先尝试读取11个字节,但没有成功,所

boost - 延迟后未调用 async_write_some 回调

我对async_write_some的回调在一秒钟sleep后没有被调用。如果我为每次写入启动一个io_service工作线程,为什么没有调用回调?标题boost::system::error_codeerror_1;boost::shared_ptrio_service_1;boost::shared_ptrsocket_1;连接voideth_socket::open_eth_socket(void){//1.resetioservicesio_service_1.reset();io_service_1=boost::make_shared();//2.createendpoin

c++ - 我如何在 Boost ASIO 中获得等待 async_read_some 的函数?

情况:我正在运行一个异步TCP服务器,其中必须有来自客户端的多个同时连接。在这个特定问题中,我有一个名为tcp_menu_id_receive()的函数,它接收并返回客户端发送的数值。问题:函数不等待async_read_some()并立即返回默认值。inttcp_menu_id_receive(){autoself(shared_from_this());intmenuid=0;socket_.async_read_some(boost::asio::buffer(data_,max_length),[this,self,&menuid](boost::system::error_c

c++ - Boost::asio::async_read() 缓冲区损坏问题

我从boost的chat_server示例中获取了代码。enumeTransactionType{eBuy=0,eSell=1};structstOrderPacket{intID;intMarketID;charm_strSignalName[22];charm_strTradeSymbol[22];intm_iQty;floatm_fPrice;eTransactionTypem_eTransactionType;};stOrderPacket是TCP客户端和TCPServer共享的结构。classchat_message{public:enum{max_body_length=s

c# - 使用 TCP : "The message could not be dispatched..." 时收到错误

我不熟悉创建WCF服务。我在VS2008中创建了一个运行在IIS7上的WCFWeb服务。当我使用http时,该服务运行良好。当我为TCP配置服务并运行时,我收到以下错误消息。Therewasacommunicationproblem.Themessagecouldnotbedispatchedbecausetheserviceattheendpointaddress'net:tcp://elec:9090/CoordinateIdTool_Tcp/IdToolService.svcisunavailablefortheprotocoloftheaddress.我搜索了很多论坛,包括这个

c - 如何以原子方式发送()缓冲区,以便不分派(dispatch)它们?

目前我有一个问题,如果我发送一个缓冲区,它可能只发送部分并返回发送的字节数。有没有办法设置一些选项或某事。这会阻止bsd套接字部分发送? 最佳答案 一般来说,对于SOCK_STREAM套接字类型(例如TCP),无法做到这一点。SOCK_DATAGRAM(对于IP,这意味着UDP)和SOCK_SEQPACKET(对于IP,没有这样的东西)会做你想做的事,但有不同的限制。无论如何,解决方案是您需要自己进行数据缓冲和分帧。也就是说,您需要在发送的流中包含带内信息,以允许接收方重建您想要的“数据包”边界。