티스토리 뷰
지난 포스팅에서는 서버클래스의 소스코드에 대해서 살펴보았다. 이번에는 클라이언트 클래스의 소스코드에 대하여 살펴보고 알아보는 시간을 가져보겠다.
1 2 3 4 5 6 7 8 9 | CClientSocket::CClientSocket(SOCKET sock) : mSock(sock) { } CClientSocket::~CClientSocket() { Close(); } | cs |
생성자와 소멸자는 이전에 포스팅 했던 서버.cpp의 내용과 동일하니 코드만 올려놓고 설명은 생략하겠다.
궁금한 사람은 이전 포스팅 http://andrew0409.tistory.com/99 를 참조하시면 되겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | bool CClientSocket::Create() { if (IsValid() == true) return true; mSock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); return mSock != INVALID_SOCKET; } void CClientSocket::Close() { if (IsValid() == true) { ::closesocket(mSock); mSock = INVALID_SOCKET; } } | cs |
Create 함수와 Close 함수또한 기존의 코드와 동일하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | bool CClientSocket::Connect(const char *ip, unsigned short port) { if (IsValid() == false) return false; sockaddr_in addr{ 0 }; addr.sin_addr.S_un.S_addr = inet_addr(ip); addr.sin_family = AF_INET; addr.sin_port = htons(port); int ret = ::connect(mSock, (sockaddr*)&addr, sizeof(addr)); if (ret == SOCKET_ERROR) Close(); return ret != SOCKET_ERROR; } | cs |
이전 포스팅에서 서버는 listen->accept 를 한다고 이야기 했었다. 클라이언트의 접속을 받을 준비가 된 서버에 connect로 접근하고 그 결과를 bool값으로 반환하는 함수가 connect이다.
마지막으로 가장 중요하다고 할 수 있는 Send 함수와 Recv 함수이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int CClientSocket::Send(const char *buf, int size) { if (IsValid() == false) return SOCKET_ERROR; return ::send(mSock, buf, size, 0); } int CClientSocket::Recv(char *buf, int size) { if (IsValid() == false) return SOCKET_ERROR; return ::recv(mSock, buf, size, 0); } | cs |
코드 자체는 무척이나 단순하다 왜냐하면 매개변수로 전부 전달받기 때문이다.
전달받은 매개변수를 다시 전달하고 그 결과를 반환하는 식인데, 반환값은 두 함수 모두 int형으로 ::send함수로 보낸 데이터가 몇바이트인지, ::recv함수로 전달받은 데이터가 몇 바이트인지를 반환한다.
특이하게도 이 두 함수 내부에 있는 ::send와 ::recv함수는 전달인자가 서로 같은데 어떤 소켓을 통하여 전달할지(받을지), 그리고 어떤 버퍼를 사용할 것인지, 얼마만큼 보낼(받을)것인지를 입력할 수 있다.
사실 서버와 클라이언트의 클래스 함수 자체는 어렵지 않다. 이 클래스를 토대로 메인을 어떻게 구성하느냐가 중요하다고 할 수 있다. 다음 포스팅에서는 마지막으로 메인예제를 몇개 다루어 볼 예정이다.
'C,C++' 카테고리의 다른 글
윈도우즈 MFC 소켓프로그래밍 : 소켓 기본 클래스 소스코드 5 (클라이언트 메인.cpp) (1) | 2015.06.25 |
---|---|
윈도우즈 MFC 소켓프로그래밍 : 소켓 기본 클래스 소스코드 4 (메인.cpp) (10) | 2015.06.25 |
윈도우즈 MFC 소켓프로그래밍 : 소켓 기본 클래스 소스코드 2 (서버cpp파일) (1) | 2015.06.24 |
윈도우즈 MFC 소켓프로그래밍 : 소켓 기본 클래스 소스코드 1 (헤더파일) (2) | 2015.06.23 |
MFC : 쓰레드(Thread) 정리와 예제 2 (1) | 2015.06.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- socket
- C++
- UML
- 디렉터리
- 클라이언트
- 자료구조
- 스레드
- 클래스
- 안드로이드
- 티그널
- 라즈베리파이
- 파일
- C
- 액터
- 유즈케이스
- 소켓
- 터미널
- Sort
- 리눅스
- 티라노 시그널
- 데이터베이스
- 파이썬
- MFC
- 정렬
- 프로세스
- 파이썬예제
- 쓰레드
- 소켓 프로그래밍
- C/C++
- 악보
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함