boost 服务器接收消息,boost asio学习笔记 [1] - 同步通讯

本文以一段示例代码,说明使用boost asio进行同步通讯的使用方法。

#include 

#include 

using namespace std;

using boost::asio::ip::tcp;

int main()

{

boost::asio::io_service   ioservice;

// I/O事件模型封装,如win下的iocp,unix下的poll, linux下的epoll等

tcp::socket               socket(ioservice);

tcp::endpoint             endpoint;     // tcp端点,包含地址和端口

boost::system::error_code errcode;

tcp::resolver resolver(ioservice);      // 地址名称解析器

tcp::resolver::iterator iter_endpoint;

// resolver一次可返回多个地址,使用迭代器逐个访问

tcp::resolver::query query("mail.163.com", "pop3");

// 主机地址查询条件类,第一个参数是主机名,后一个是所需连接的服务名。

// 指定服务名可以使返回的endpoint除了包含主机地址,还会设定该服务的默认端口(如pop3默认端口为110)

// 如果只需要查询主机地址,则服务名可以为空字符串(返回的endpoint.port()==0)

iter_endpoint = resolver.resolve(query, errcode);  // 解析所需的服务地址

if ( errcode.value() != 0) {

cout<

return 1;

}

// 获取找到的目标服务端点地址和端口(存储在endpoint实例中)

endpoint = iter_endpoint->endpoint();

cout<

// pop3命令

const char *cmd_user = "user myuser\n";

const char *cmd_pass = "pass mypass\n";

const char *cmd_list = "list\n";

const char *cmd_quit = "quit\n";

char result[256];   // 服务器返回消息缓存

try {

// 连接POP3服务器,并获取服务器欢迎消息。

// boost::asio::buffer函数将创建一个缓存包装对象,内部地址指向result变量

socket.connect(endpoint);

size_t len = socket.read_some(boost::asio::buffer(result, 256));

if ( len > 0 ) {

result[len] = '\0';

cout<

}

// 发送用户命令, 并接收回复

socket.send(boost::asio::buffer(cmd_user, strlen(cmd_user)));

len = socket.read_some(boost::asio::buffer(result, 256));

if ( len > 0 ) {

result[len] = '\0';

cout<

}

// 发送口令命令, 并接收回复

socket.send(boost::asio::buffer(cmd_pass, strlen(cmd_pass)));

len = socket.read_some(boost::asio::buffer(result, 256));

if ( len > 0 ) {

result[len] = '\0';

cout<

}

// 发送退出命令, 并接收回复

socket.send(boost::asio::buffer(cmd_quit, strlen(cmd_quit)));

len = socket.read_some(boost::asio::buffer(result, 256));

if ( len > 0 ) {

result[len] = '\0';

cout<

}

socket.close();

} catch (const boost::system::system_error& e) {

cout<

}

return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值