boost::asio 通信问题
下面的代码在VC9 + Boost 1.36.0下编译并在WinXP + SP2运行通过,但是在运行时发现一个有趣的现象,在调用发送(write_some)函数返回处打印当前时间信息,当收到第一个数据时打印接受到数据的时间发现两个时间只差总是间隔15个毫秒左右的时间,通信波特率是9600bps,那么我的理解是一个字节大概要1毫秒左右时间完成传输,发送和接受的时间差应该也是1ms左右,为什么会有这么大间隔呢?不知道那位朋友遇到过这样的问题,恳请指教:)
编译生成asio.exe
在命令行下开启两个实例
asio COM1 server // 负责接收数据
asio COM2 client // 负责发送数据
COM1和COM2互联,保证两个实例在同一个cpu上运行。
int do_serial_test(int argc, char* argv[]) {
using namespace boost::asio;
using namespace boost::posix_time;
using namespace boost::gregorian;
io_service isvr;
serial_port port(isvr);
if (argc != 3) {
std::cout << "Usage : Asio [COM1] [client/server]\n";
return -1;
}
try {
//
// Open COM1.
//
port.open(argv[1]);
//
// Set parameter with 9600bps,8,1,1,none.
//
port.set_option<serial_port_base::baud_rate>(
serial_port_base::baud_rate(9600));
port.set_option<serial_port_base::character_size>(
serial_port_base::character_size(8));
port.set_option<serial_port_base::stop_bits>(
serial_port_base::stop_bits(serial_port_base::stop_bits::one));
port.set_option<serial_port_base::flow_control>(
serial_port_base::flow_control(serial_port_base::flow_control::none));
port.set_option<serial_port_base::parity>(
serial_port_base::parity(serial_port_base::parity::none));
std::string par(argv[2]);
if (par == std::string("client")) {
std::cout << "Client mode started...\n";
//
// Send a plain text.
//
char* text = "Hello Boost::asio::serial_port:)\n";
port.write_some<boost::asio::mutable_buffers_1>(
boost::asio::buffer(text, /*::strlen(text)*/ + 1));
std::cout << to_simple_string(microsec_clock::local_time()) << std::endl;
} else if (par == std::string("server")) {
std::cout << "Server mode started...\n";
for (;;) {
//
// Waitting for a plain reply text.
//
char reply[128] = {0};
size_t reply_size = port.read_some<boost::asio::mutable_buffers_1>(
boost::asio::buffer(reply, 128));
std::cout << to_simple_string(microsec_clock::local_time()) << std::endl;
std::cout << reply << std::endl;
}
} else {
std::cout << "Unknow mode, pls read usage carefully.\n";
}
//
// Close port.
//
port.close();
} catch (std::exception& exp) {
std::cout
<< exp.what()
<< ".\n";
::exit(0);
}
return 0;
}
int main(int argc, char* argv[]) {
return do_serial_test(argc, argv);
}
编译生成asio.exe
在命令行下开启两个实例
asio COM1 server // 负责接收数据
asio COM2 client // 负责发送数据
COM1和COM2互联,保证两个实例在同一个cpu上运行。
...全文
相关推荐
boost::asio::serialport实现串口通信
通过boost::asio::serialport类实现串口通信的例子
基于boost.asio库的C++http/https web server
该c++ web server基于boost.asio库编写,同时支持http和https协议。该工程基于vs2015编译通过,相关配置和说明见readme.txt
Boost.Asio C++ Network Programming(高清,带书签,可复制)
Boost.Asio C++ Network Programming(高清,带书签,可复制)
boost asio
boost asio概念文档;主要讲述asio基本感念、函数定义等内容
Boost_Asio
Boost是C++标准库开发人员参与编写的,非常好。里面有各种数组、线程池、通信库等,是Linux、Window通用的东西。不学他,就落伍了。



