본문 바로가기
게임 서버 공부

[기초]소켓 프로그래밍

by Dev_Hugh 2023. 11. 23.
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 주소를 연결했으니 들어가서 코드를 자세히 보면서 이해하자

- 클라이언트 기준 함수 사용 MSDN 예시 바로가기

- 서버 기준 함수 사용 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
반응형

'게임 서버 공부' 카테고리의 다른 글

[기초] 네트워크  (0) 2023.11.22