검색결과 리스트
프로그래밍에 해당되는 글 6건
- 2015.04.13 Daytime.1 - A synchronous TCP daytime client
- 2011.10.06 Android 개발 Tip - 12. ListView 를 작성할때 체크 해야 할 것.
- 2011.09.30 2010 년도 ACM - ICPC 2
글
Daytime.1 - A synchronous TCP daytime client
다음 내용에 기반함
Introduction to Sockets
The tutorial programs in this section show how to use asio to develop simple client and server programs. These tutorial programs are based around the daytimeprotocol, which supports both TCP and UDP.
#include <iostream> #include <boost/array.hpp> #include <boost/asio.hpp>
using boost::asio::ip::tcp; int main(int argc, char* argv[]) { try { if (argc != 2) { std::cerr << "Usage: client <host>" << std::endl; return 1; }
boost::asio::io_service io_service;
파라미터에 지정된 서버 이름을 TCP endpoint 로 변환할 필요가 있는데, 이는 ip::tcp::resolver 객체를 통한다.
tcp::resolver resolver(io_service);
resolver 는 쿼리 객체를 받아 이를 endpoint 의 리스트로 변환한다. 쿼리이름을 서버이름을 이용하여 생성할 것이며, 이 서비스의 이름은 "daytime" 이다.
리스트는 ip::tcp::resolver::iterator 타입으로 리턴된다. (ip::tcp::resolver::iterator 의 기본 생성자를 통해 생성된 객체는 end iterator 로 사용 될 수 있다)
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
이제 소켓을 생성하고 연결할 차례다.
얻어진 리스트는 IPv4 와 IPv6 를 모두 포함할 수도 있으므로 동작하는 것을 찾기 위해 각각의 주소들에 대해 시도해야한다.
이런 사용이, 클라이언트 프로그램이 특정 IP 주소체계와 독립적으로 프로그램을 구성할 수 있게 해준다.
boost::asio::connect() 함수는 자동적으로 이를 수행해준다.
tcp::socket socket(io_service); boost::asio::connect(socket, endpoint_iterator);
이제 연결이 수립되었다. daytime 서비스의 응답만을 기다리면 된다.
boost::array 를 전달받은 데이터를 저장하는데 사용하도록 하자. boost::asio::buffer() 함수는 자동적으로 배열의 사이즈를 결정해주어 버퍼 오버런이 발생하지 않게 도와준다. boost::array 대신에, char[] 나 std::vector 도 사용할 수 있다.
for (;;) { boost::array<char, 128> buf; boost::system::error_code error; size_t len = socket.read_some(boost::asio::buffer(buf), error);
서버가 연결을 종료했을때, ip::tcp::socket::read_some 함수는 boost::asio::error::eof 에러와 함께 종료될 것이며, 이때 루프를 빠져나가면 된다.
if (error == boost::asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw boost::system::system_error(error); // Some other error. std::cout.write(buf.data(), len); }
마지막으로, thrown 된 예외를 처리하면 된다.
full source code
실행결과
'Programming > Boost asio' 카테고리의 다른 글
Daytime.3 - An asynchronous TCP daytime server (0) | 2016.04.03 |
---|---|
Daytime.2 - A synchronous TCP daytime server (0) | 2015.04.19 |
Tutorial 5. Synchronising handlers in multithreaded programs (0) | 2015.04.11 |
Tutorial 4. member function handler (0) | 2015.03.17 |
Tutorial 3. Binding arguments to a handler (0) | 2015.03.15 |
설정
트랙백
댓글
글
Android 개발 Tip - 12. ListView 를 작성할때 체크 해야 할 것.
1. ListView 스크롤시 배경색이 바뀐다 .
- 안드로이드 시스템이 성능을 위해 테마를 통해 얻은 색상으로 배경화면을 불러온다.
이러면 스크롤시에 색상이 바뀌는데,이런 문제점을 해결하기 위해
android:cacheColorHint 값을 지정한다.
2. GetView 의 중복 호출
- wrap_content 의 경우 발생. 필자 생각으로는 wrap 은 내부의 크기를 알아야하기 때문에 일단 getView가 호출되면 다시 내부의 크기를 얻은후 돌아오는 과정이 필요하기 때문에 getView 가 중복으로 호출되는 것으로 보인다.
3. CheckBox 나 Button과 같은 아이템들을 리스트뷰 안에 넣었다.
- focusable을 false 로 해야 리스트뷰가 포커싱 될 수 있다.
'Mobile Programming > Android Tip' 카테고리의 다른 글
Emulator 단축키 (0) | 2012.02.17 |
---|---|
Android 개발 Tip - 13. HashMap Loop (0) | 2011.11.28 |
Android 개발 Tip - 11. 동적으로 Layout을 생성했을때 잊지 말아야 할 것.. (0) | 2010.12.01 |
Android 개발 Tip - 10. Java 에서 MySql 관련 쿼리를 실행할때 .. (0) | 2010.11.17 |
Android 개발 Tip - 9. inflater로 xml레이아웃을 불러들였을때 findView (0) | 2010.11.17 |
설정
트랙백
댓글
글
2010 년도 ACM - ICPC
-- 여기까지 같이 참여한 오빠의 블로그 펌. ( http://galphy.tistory.com/83 )
대학생 개발자들의 축제!
2010 년도 Acm - ICPC 본선 대회장. ( 대학생 프로그래밍 경시대회 )
블로그 유입경로보니까 Acm - icpc 예제가 키워드로 있어서,
어느새 이렇게 됐나 싶다 .ㅎ
이 이전에 미리 참가를 했다면 2년차에는 좀 더 좋은 결과를 낼수 있었을텐데 ,
첫 참여에서는 고작 본선진출에 그치고 말았다 .ㅎ
올해부터는 내가 대학생이 아니니까, 참여할수 없는 자격이됐고 ..
그래도 경품도 얻고, 좋은 경험을 했다.
후배들에게 꼭 공부해서 참여해보라고 하고싶은 대회.
이력서에 한줄이라도 들어가고 , 준비하면서 실력도 늘고.
'도움될지도? IT 정보' 카테고리의 다른 글
Tap Sonic 3배속 6키 , 넌 내게 반했어 올콤보 (2) | 2011.01.31 |
---|---|
넥서스원 , 2.2.1 업데이트 (0) | 2010.10.23 |
Android 기본 내장 이메일 어플리케이션에서 계정 설정하기 (0) | 2010.10.23 |
스마트 폰이란? (1) | 2010.09.09 |