Server programming61 02_12_네트워크 프로그래밍_RecvBuffer 테스트 질문 Q1. RecvBuffer를 만들고 사용하기 위해 작업한 내용을 나열해 보세요. Q2. 작업한 내용을 분류해 정리해 보세요 답변 답1. ServerCore에 RecvBuffer클래스를 추가한다. public을 붙여준다. ->클래스 안에 **ArraySegment _buffer;**를 선언한다. ->int bufferSize를 인자로 받는 RecvBuffer 생성자를 만든다. new ArraySegment를 해서 강제로 할당을 해 _buffer에 대입한다. int _readPos; int _writePos; 변수를 선언한다. ->DataSize랑 FreeSize를 public int 타입의 getter-only property(읽기 전용 속성)로 선언하고 계산한 return 값을 get으로 포.. Server programming 2023. 4. 6. 02_11_네트워크 프로그래밍_TCP vs UDP 요약: 지난 시간에는 서버와 클라이언트를 만들고 송수신 인터페이스를 구현했습니다. 이제 게임에서 문자열 대신 패킷을 사용해야 합니다. TCP 프로토콜을 사용하고 있지만, 패킷 분석과 전송에는 규약이 필요합니다. TCP와 UDP의 차이점을 알아야만 MMO를 만들 수 있습니다. TCP는 순서 보장과 분실 책임을 지지만 속도가 느리고, UDP는 순서 보장과 분실 책임이 없지만 속도가 빠릅니다. 일반적으로 MMO에서는 안정성이 중요하기 때문에 TCP가 많이 사용됩니다. 테스트 문제: TCP 프로토콜을 사용하는 경우 어떤 특징이 있나요? UDP 프로토콜의 장점은 무엇인가요? MMO 게임에서 일반적으로 어떤 프로토콜이 많이 사용되나요? 왜 그렇게 사용되나요? 답변: TCP 프로토콜은 순서 보장, 분실 책임 지기, .. Server programming 2023. 4. 6. 02_10_네트워크 프로그래밍_Connector Q1. DummyClient와 Server에서 ServerCore를 이용해서 동작하는 프로세스를 설명해 보세요. Q2. Connector를 만들어 주는 이유를 두가지 말해 보세요. Q3. 작업한 내용을 나열해 보세요. Q4. DummyClient, Server, ServerCore Connector, ServerCoreListener, ServerCore Session이 어떻게 상호작용하며 동작하는지 설명해주세요 답 1. ServerCore에서는 Listener를 이용하여 클라이언트의 접속을 대기합니다. 클라이언트가 접속하면, Listener에서 Accept 함수를 호출하여 클라이언트와 연결된 소켓(Socket)을 생성합니다. 생성된 소켓은 Connector를 이용하여 데이터 송수신을 처리합니다. 데이터.. Server programming 2023. 4. 6. 02_09_네트워크 프로그래밍_Session #4_엔진단과 컨텐츠단 분리 Q1. 필요한 인터페이스 동작 4가지는 무엇이 있을까? Q2. Session을 상속받아 GameSession을 사용하는 이유는 무엇인가? Q3. 엔진단과 컨텐츠단으로 코드를 옮겨가며 정리해 보세요. 엔진단과 컨텐츠 단의 구분 기준은 무엇인가? Q4. 무슨 작업을 했는지 나열해 보세요. Q5. Session#1~Session#4까지 뭘 한건지 설명해 보세요 답 1. OnConnected(EndPoint endPoint); OnRecv(ArraySegment buffer); OnSend(int numOfBytes); OnDisconnected(EndPoint endPoint); 2. Session 클래스는 세션(Session)을 생성하고 관리하는 기본적인 기능을 제공합니다. 하지만 게임에 특화된 기능을 추가.. Server programming 2023. 4. 4. 02_08_네트워크 프로그래밍_Session #3_BufferList Q1. 개선을 위해 작업한 내용들을 나열해 보세요 Q2. 더 개선할 점은 뭐가 있을까? 답 1. recvArgs도 _sendArgs처럼 Session클래스로 옮기고 인터페이스를 맞춰 준다. 그로 인한 변화를 수정해 준다. 한번에 많은 _sendArgs를 보내기 위해 SetBuffer대신 BufferList를 사용한다. List _pendingList = new List();를 class Session에 만들어 주고, RegisterSend에서 _pendingList를 Clear해준 다음, while문으로 _sendQueue.Count가 0보다 클동안 _sendQueue를 Dequeue해서 하나씩 buff에 넣어주고, 그걸 _pendingList에 하나하나 Add(new ArraySegment()인터페이스.. Server programming 2023. 4. 4. 02_07_네트워크 프로그래밍_Session #2_Send Q1. SocketAsyncEventArgs 를 재사용하기 위해 어떻게 수정 했는가? Q2. OnSendCompleted에서 _sendQueue에 쌓여있으면 어떻게 했는가? Q3. 아직 부족한 점은 무엇인가? Q4. Send 함수에서 사용된 SocketAsyncEventArgs와 OnSendCompleted 함수는 어떤 역할을 하나요? Q5. 이번 시간에 한 작업을 요약해 보세요. Q1. SocketAsyncEventArgs를 재사용하기 위해서는 RegisterSend나 RegisterRecv를 호출할 때마다 새로운 SocketAsyncEventArgs 객체를 생성하는 것이 아니라, 미리 만들어 놓은 SocketAsyncEventArgs 객체를 사용하면 됩니다. 이렇게 하면 객체 생성에 따른 오버헤드가 .. Server programming 2023. 4. 4. 02_06_네트워크 프로그래밍_Session #1_Recieve Q1. 지난 시간 코드에서 반복되는 구간이 있음에도 스택 오버플로우를 크게 걱정 안해도 되는 이유는? Q2. 이용자가 늘 것을 대비하여 Listener의 Init에서 어떤 수정을 해주었는가? Q3. OnAcceptCompleted는 왜 위험존인가? Q4. Session의 Start, RegisterRecv, OnRecvComplated가 어떤 흐름으로 recieve를 비동기로 움직이게 하고 있나요? Q5. Listener에서 AcceptAsync가 완료 되면 args.AcceptSocket에 연결된 새로 만들어준 소켓을 뱉어 주고 있었다. Recieve의 경우는 이 작업이 없는 대신 무엇을 만들어줘야 하는가? Q6. 이번 시간에 한 Recieve를 분리한 작업 과정을 말해 보세요 답 최대 대기수를 뒀기 .. Server programming 2023. 4. 4. 02_05_네트워크 프로그래밍_Listener Q1. Listener를 만들었는데 Accept만 논블로킹 방식(비동기 방식)으로 만들었을 때 작동하는 흐름을 설명해 보세요. Q2. Accept 함수가 논블로킹 방식으로 작동해야 하는 이유에 대해 설명해 보세요 Q3. 클라이언트가 연결되면 Listener가 수행하는 작업에 대해 말해 보세요 Q4. 서버를 구현할 때 Listener를 사용하는 방법에 대해 말해 보세요. Q5. 작업한 과정을 말해보세요. 답 1.Listener가 비동기 방식으로 작동할 때의 흐름: Listener는 클라이언트의 연결 요청을 받아들이는 역할을 합니다. 비동기 방식으로 작동할 때에는, Listener가 연결 요청을 받으면 해당 요청을 처리하는 새로운 스레드를 생성하여 처리합니다. 이렇게 하면, 다수의 클라이언트 요청을 동시에 .. Server programming 2023. 4. 4. 02_04_네트워크 프로그래밍_소켓 프로그래밍 입문 #2 Q1. 실제 게임에서는 블로킹 함수를 쓰면 안되는 이유는? Q2. 간단한 소켓 프로그램을 구현해 보세요. 네트워크프로그래밍을 처음으로 시작해보자. 지난시간에 했던 코드와 lock 도 삭제한다. solution에서 우클릭해서 속성으로 가서 이렇게 맞춰주면 된다. 일단 문지기를 만들어 줘야 한다. Listen 소켓을 만들어 줘야 한다. namespace ServerCore { class Program { static void Main(string[] args) { // DNS ( Domain Name System ) Socket listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Socket의 첫번째 인.. Server programming 2023. 4. 3. 02_03_네트워크 프로그래밍_소켓 프로그래밍 입문 #1 Q. 손님이 하는 일은 클라이언트에, 식당이 하는 일은 서버에 비유하여 하는 일을 설명해 보자. 손님 클라이언트 하는 일 1) 핸드폰 준비 1) 소켓 준비 2) 식당 번호로 입장 문의 2) 서버 주소로 Connect 휴대폰을 통해 대리인 휴대폰과 통화 소켓을 통해 Session 소켓과 패킷 송수신 식당 서버 하는 일 1) 문지기 고용 1) Listener 소켓 준비 2) 문지기 교육 (식당 번호 알려줌) 2) Bind (서버 주소/Port를 소켓에 연동) 3) 영업 시작 3) Listen 4) 안내 4) Accept 손님 대리인을 통해 손님과 대화 클라 세션을 통해 클라와 패킷 송수신 클라 입장에서는 간단하지만 서버 입장에서는 해야 할게 많다. Server programming 2023. 4. 3. 02_02_네트워크 프로그래밍_통신 모델 Q1. 패킷을 보낼때와 받을 때 생성되는 계층을 나열하고 택배에 비유해서 설명해 보세요. Q2. 최종 주소와 단지경로의 차이는? Q3. TCP, UDP의 차이는? Q4. TCP/IP 모델을 그려보고, 각 계층에 대해 설명하세요. 7계층 모델도 그려보세요. Q5. 7계층 주소, 3계층 주소, 장치, 2계층 주소, 장치에 대해 말해 보세요. 계층 택배 TCP/IP 모델 OSI 7계층 모델 주소 장치 7 -- 어플리케이션 6 -- 프리젠테이션 5 -- 상품 -- 어플리케이션 -- 유저인터페이스 HTTP, FTP, DNS -- 세션 -- 도메인 4 -- 배송정책 -- 트랜스포트 -- TCP/UDP 3 -- 최종주소 -- 네트워크 -- 네트워크간 경로 -- IP -- 라우터 2 -- 단지경로 -- 데이터링크 --.. Server programming 2023. 3. 31. 02_01_네트워크 프로그래밍_네트워크 기초 이론 Q1. 스위치와 라우터가 하는 일을 택배 배송에 비유하여 설명해 보세요. 스위치 : 경비아저씨 라우터 : 택배 배송 센터 같은 네트워크 내 컴퓨터로 보내는 경우 : 컴퓨터 -> 스위치 -> 같은 네트워크 내의 컴퓨터 다른 네트워크의 컴퓨터로 보내는 경우 : 컴퓨터 -> 스위치 ->라우터 -> 다른 네트워크의 스위치 -> 다른 네트워크의 컴퓨터 출처: https://inf.run/P4nt Server programming 2023. 3. 31. 이전 1 2 3 4 5 6 다음