-
[boost asio] 동기식 echo 채팅 클라이언트C_C++ 프로그래밍/boost 2019. 7. 31. 21:02
boost asio
asio의 서버 부분 소스코드에 이어서 client 부분도 설명을 이어서 진행하겠다.
synchronous_client.cpp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include <boost/asio.hpp>#include <iostream>#pragma warning (disable : 4996)constexpr char SERVER_IP[] = "127.0.0.1";constexpr unsigned short PORT_NUMBER = 1234;int main() {boost::asio::io_service io_service;boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(SERVER_IP),PORT_NUMBER);boost::system::error_code connect_error;boost::asio::ip::tcp::socket socket(io_service);socket.connect(endpoint, connect_error);if (connect_error) {std::cout << "Connection fail. error No: " << connect_error.value()<< ", Message: " << connect_error.message() << std::endl;}else {std::cout << "Connection Success" << std::endl;}while (1){char message[128] = { 0, };std::cin >> message;int nMsgLen = strnlen_s(message, 128 - 1);boost::system::error_code ignored_error;socket.write_some(boost::asio::buffer(message, nMsgLen), ignored_error);std::cout << "Sent Message: " << message << std::endl;std::array<char, 128> buf;buf.assign(0);boost::system::error_code error;size_t len = socket.read_some(boost::asio::buffer(buf), error);if (error) {if (error == boost::asio::error::eof) {std::cout << "Connection cut off" << std::endl;}else {std::cout << "Error No: " << error.value() << "error Message: "<< error.message().c_str() << std::endl;}break;}std::cout << "Server Message: " << &buf[0] << std::endl;}if (socket.is_open()) {socket.close();}getchar();return 0;}cs 123boost::asio::io_service io_service;boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(SERVER_IP),PORT_NUMBER);cs 서버와 마찬가지로 io_service를 설정해준다.
하지만, endpoint의 경우에는 조금 다른데, 접속할 서버의 IP는 문자열로 받아들이도록 from_string
클래스를 사용하였다.
1234567if (connect_error) {std::cout << "Connection fail. error No: " << connect_error.value()<< ", Message: " << connect_error.message() << std::endl;}else {std::cout << "Connection Success" << std::endl;}cs 서버에서 받은 데이터의 error 유무를 확인하는 부분이다.
123if (socket.is_open()) {socket.close();}cs 사실 이 부분은 로직상으로 필요가 없는 부분이지만, getchar와 더불어...소스코드를 수정하다보니 부득이하게 남게 되었다.이 부분은 서버와 연결이 되면 안되는 경우 ( 클라이언트의 일방적인 종료 등등.. )에 사용이 된다.결과
마무리
boost asio는 참 좋은 것 같다.
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍 > boost' 카테고리의 다른 글
[boost asio] 동기식 echo 채팅 서버 (0) 2019.07.31 [boost] 윈도우에 boost를 설치해보자 (0) 2019.07.11 [boost] boost란 무엇인가? (0) 2019.07.11