陈赫的身高:Boost socket 同步编程示例(服务端,客户端)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 11:39:59

服务端程序代码:

 

1 // BoostServer.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include
6 #include
7
8 using namespace boost::asio;
9 #define BLOCK_SIZE 64*1024
10
11 int main(int argc, char* argv[])
12 {
13 // 所有asio类都需要io_service对象
14 io_service iosev;
15 ip::tcp::acceptor acceptor(iosev,
16 ip::tcp::endpoint(ip::tcp::v4(), 1000));
17 for(;;)
18 {
19 // socket对象
20 ip::tcp::socket socket(iosev);
21 // 等待直到客户端连接进来
22 acceptor.accept(socket);
23 // 显示连接进来的客户端
24 std::cout << "client from: "
25 << socket.remote_endpoint().address() << std::endl;
26
27 boost::system::error_code ec;
28
29 // 从客户端读取数据
30 char buf[BLOCK_SIZE];
31 int len = socket.read_some(buffer(buf), ec);
32 // 或者可以使用read_until读到某个字符为止
33 // 或者可以使用某种判断方式循环读取
34
35 if (ec)
36 {
37 std::cout <<
38 boost::system::system_error(ec).what() << std::endl;
39 break;
40 }
41 std::cout.write(buf, len);
42 std::cout << len << std::endl;
43
44 Sleep(1000);
45
46 // 向客户端发送
47 len = socket.write_some(buffer(buf, len), ec);
48 if(ec)
49 {
50 std::cout <<
51 boost::system::system_error(ec).what() << std::endl;
52 break;
53 }
54 std::cout << "writed " << len << std::endl;
55 // 与当前客户交互完成后循环继续等待下一客户连接
56 }
57
58
59 return 0;
60
61 }

 

 

客户端程序代码:

 

1 // BoostClient.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include
6 #include
7
8 using namespace boost::asio;
9
10 #define BLOCK_SIZE 64*1024
11
12 void fill_buffer(char* s)
13 {
14 for (int i=0; i15 {
16 s[i] = 'a';
17 }
18 }
19
20 int main(int argc, char* argv[])
21 {
22 // 所有asio类都需要io_service对象
23 io_service iosev;
24 // socket对象
25 ip::tcp::socket socket(iosev);
26 // 连接端点,这里使用了本机连接,可以修改IP地址测试远程连接
27 ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 1000);
28 // 连接服务器
29 boost::system::error_code ec;
30 socket.connect(ep,ec);
31 // 如果出错,打印出错信息
32 if(ec)
33 {
34 std::cout << boost::system::system_error(ec).what() << std::endl;
35 return -1;
36 }
37 // 发送数据
38 char buf[BLOCK_SIZE];
39 fill_buffer(buf);
40 size_t len = socket.write_some(buffer(buf), ec);
41 std::cout << "writed " << len << std::endl;
42
43 // 接收数据
44 memset(buf, 0, BLOCK_SIZE);
45 len=socket.read_some(buffer(buf), ec);
46 std::cout.write(buf, len);
47 std::cout << len << std::endl;
48
49 return 0;
50
51 }