윈도우 소켓 3편 채팅 프로그램을 만들어보자!
· by 정연한
윈도우 소켓에 대한 이해가 부족하다면 지난 편을 꼭 보고 와주세요!!
지난 2편에서 우리는 hello를 echo하는 간단한 서버, 클라이언트 프로그램을 만들었습니다.
이번 편에서는 단순히 텍스트를 echo하는 프로그램이 아니라 서로 텍스트를 주고 받는 간단한 채팅 프로그램을 한 번 만들어 보겠습니다.
조금 어려운 내용이 나올 수 있으니 잘 따라와주세요!
일단 기본 틀은 2편에서 완성한 코드를 그대로 가져오겠습니다.
#pragma comment(lib, "ws2_32")
#include <WS2tcpip.h>
#include <iostream>
using namespace std;
int main() {
WSAData wsaData{ }; // 윈속 객체 생성
WSAStartup(MAKEWORD(2, 2), &wsaData); // 윈속 객체 초기화
// 소켓 디스크립터 생성
auto sock{ socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) };
constexpr int PORT{ 12345 };
sockaddr_in addr{ AF_INET, htons(PORT) };
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sock, reinterpret_cast<sockaddr*>(&addr), sizeof(addr));
listen(sock, SOMAXCONN);
sockaddr_in client_addr{ };
int client_size{ sizeof(client_addr) };
auto client_sock{ accept(sock, reinterpret_cast<sockaddr*>(&client_addr), &client_size) };
string sendMessage{ "hello" }; // 보낼 메세지 객체
string recvMessage(1024, '\0'); // 받을 메세지 객체
send(client_sock, &sendMessage.front(), sendMessage.length(), 0); // 메세지 송신
recv(client_sock, &recvMessage.front(), 1024, 0); // 메세지 수신
cout << recvMessage << endl;
closesocket(client_sock);
closesocket(sock);
WSACleanup();
return 0;
}
우선은 서버부터 보도록 합시다.
저번 코드를 그대로 가져오긴했지만, 주석을 좀 더 달고, 몇몇 변수의 이름이 좀 마음에 안들어서 바꿔주었습니다.
임시 저장 된 포스트입니다. 수정예정
← 다음 글
2022-1 인트아이 6차 정기 밋업 요약
이전 글 →
Gradle과 함께 Spring Boot 시작하기