|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Echo服务器对应的C++客户端 :
(对照上一篇来学习,接收和发送的顺序是一样的)
- // Echo服务器对应的C++客户端 :
- // 同步的,阻塞式的客户端
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <boost\asio.hpp>
- #include <boost\array.hpp>
- //不用UDP协议的原因是包的大小有限制,然后有可能是乱序,
- // 重发,丢包都有可能,有TCP还是比较简单安全的
- using boost::asio::ip::tcp;
- enum { max_length = 1024 };
- int main()
- {
- boost::asio::io_service io_service;
- tcp::socket s(io_service);
- tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"), 2001);
- s.connect(ep);
- //在这里,3次握手成功
- size_t request_length = 1024;
- char reply[max_length];
- size_t reply_length;
- // --接收服务器发来的当前时间 ;
- boost::array<char, 128> buf;//字节流缓存
- boost::system::error_code error;//错误码的形式来返回错误,而不是用抛出异常的方式
- size_t len = s.read_some(boost::asio::buffer(buf), error);//开始读取服务器发来的数据
- if (error == boost::asio::error::eof)
- {
- return 0;// 服务器关闭了连接,客户端可以直接退出了
- }
- else if (error)
- {
- throw boost::system::system_error(error);//一些其他的错误
- }
- std::cout << "Reply is :";
- std::cout.write(buf.data(), len);//输出到控制台
- // --发消息给服务器 ;
- std::cout << "Enter message:";
- char request[max_length];
- std::cin.getline(request, max_length);//输入
- request_length = std::strlen(request);
- boost::asio::write(s, boost::asio::buffer(request, request_length)); // 出错会抛出异常;
- // --接收服务器发来的消息 ;
- //错了会抛异常,真正收到request_length多长度的数据后才会往下走,否则一直等待
- reply_length = boost::asio::read(s, boost::asio::buffer(reply,request_length));
- std::cout << "Reply is :";
- std::cout.write(reply, reply_length);//输出到控制台
- getchar();
- system("pause");
- return 0;
- }
复制代码 |
评分
-
查看全部评分
|