32 {
33 if (argc != 2) {
34 std::cout << "Usage: " << argv[0] << " <server port>" << std::endl;
35 return -1;
36 }
37
39
40 int server_port = atoi(argv[1]);
42 [&server_port]() {
43 struct sockaddr_in server_addr;
44 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
45 server_addr.sin_family = AF_INET;
46 server_addr.sin_port = htons((uint16_t)server_port);
47
48 std::string user_input;
49 std::vector<char> server_reply(2049);
50 ssize_t nbytes = 0;
51 uint32_t count = 0;
52
54 session.
Socket(AF_INET, SOCK_DGRAM, 0);
55 if (session.
Connect((
struct sockaddr*)&server_addr,
56 sizeof(server_addr)) < 0) {
57 std::cout << "connect to server failed, " << strerror(errno)
58 << std::endl;
59 return;
60 }
61
62 while (true) {
63 count = 0;
64 std::cout << "please enter a message (enter Ctrl+C to exit):"
65 << std::endl;
66 std::getline(std::cin, user_input);
68 break;
69 }
70 if (user_input.empty()) {
71 continue;
72 }
73
74 if (session.
Send(user_input.c_str(), user_input.length(), 0) < 0) {
75 std::cout << "send message failed." << std::endl;
76 return;
77 }
78
79 while ((nbytes = session.
Recv(server_reply.data(),
80 server_reply.size(), 0)) > 0) {
81 for (auto itr = server_reply.begin();
82 itr < server_reply.begin() + nbytes; ++itr) {
83 std::cout << *itr;
84 }
85 count += (uint32_t)nbytes;
86 if (count >= user_input.length()) {
87 break;
88 }
89 }
90
91 if (nbytes == 0) {
92 std::cout << "server has been closed." << std::endl;
94 return;
95 }
96
97 if (nbytes < 0) {
98 std::cout << "receive message from server failed." << std::endl;
100 return;
101 }
102
103 std::cout << std::endl;
104 }
105 },
106 "echo_client");
107
109 return 0;
110}
ssize_t Recv(void *buf, size_t len, int flags, int timeout_ms=-1)
ssize_t Send(const void *buf, size_t len, int flags, int timeout_ms=-1)
int Connect(const struct sockaddr *addr, socklen_t addrlen)
int Socket(int domain, int type, int protocol)
bool CreateTask(const RoutineFactory &factory, const std::string &name)
bool Init(const char *binary_name, const std::string &dag_info)