728x90
반응형
오늘도 기초에 대해서 공부하려고 한다... 소켓 프로그래밍에 대해 용어 위주로 작성할 예정이다.
그 후 실제 코드를 좀 보면서 게임 서버를 만들기 위한 과정과 기초적인 내용들을 정리할 예정이다.
네트워크 프로그래밍 단계를 클라이언트와 서버로 구분지어 설명하려 한다.
Clinet
- 소켓 생성 -> 서버 소켓 연결 (Connect) -> Data Send/Recv -> 소켓 닫기 (Close)
Server
- 소켓 생성 -> 소켓 Bind -> 소켓 접속 대기 (Listen) -> 연결 소켓 생성 (Accept) -> 데이터 Recv/Send -> 소켓 닫기 (Close)
결국 Socket을 만들어 접속을 시도하고 위 단계들이 진행 되는데 그럼 Socket을 알아보자
Socket
- 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점 (위키 백과)
- 결론적으론 '네트워크 통신을 위해 사용하는 도구'라고 생각하자.
네트워크 프로그래밍에서 각 단계별로 사용된 용어 (socket, connect, send, recv, close, bind, listen, accept ..)를
함수 형태로 호출해서 그대로 사용하면 된다.
무슨 말이냐면 WinSocket 기준으로 예시를 들어 설명하면 다음과 같다. 더 궁금한 내용은 아래 MSDN 주소를 연결했으니 들어가서 코드를 자세히 보면서 이해하자
// 모든 내용은 WinSocket MSDN을 기반으로 작성했습니다.
// 클라이언트 기준으로 설명을 작성했습니다. 자세한 내용은 MSDN 독스 링크를 걸었는데 확인해보면 됩니다.
// Socket 생성시 socket() 사용
SOCKET ConnectSocket = INVALID_SOCKET;
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
// Socket bind() 사용
// Socket 연결 Connect() 함수 이용
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
if (iResult == SOCKET_ERROR) {
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
}
// Data Send와 Recv시 send()와 recv() 사용
iResult = send(ConnectSocket, sendbuf, (int) strlen(sendbuf), 0); // send()
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0); // recv()
// Socket 끊을 때 close() 사용
closesocket(ConnectSocket);
728x90
반응형