묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
언리얼엔진과 IOCP 서버 연동시
서버에서 언리얼엔진의 네비메시나 비헤이비어트리 같은건 사용을 할 수 없나요?아니면 언리얼엔진 내부 코드를 분석하고 뜯어와서 C++서버에 이식을 하는건가요?
-
해결됨네트워크, 그림으로 이해하자
TCP 흐름 제어에서 슬라이딩 윈도우 기법 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.슬라이딩 윈도우 기법에 대해 몇 가지 질문 드리고자 합니다.A의 윈도우 크기 250은 B의 윈도우 크기가 250이여서 맞춰져서 그런 건가요? 아니면 그냥 가정으로 250이라고 한 건가요?확인 응답이 ACK 101인 이유는 100 byte 데이터 크기를 보냈기 때문에 이에 +1 값을 보낸 것이라 이해하면 될까요?A에서 보낸 데이터 50 바이트를 B가 버퍼에 저장하고, 어플리케이션 프로세스에서 50바이트를 처리했다고 했는데, 이는 A로부터 마지막으로 받은 데이터를 사용된 게 아닌 그보다 먼저 버퍼에 저장된 데이터를 사용했다고 이해하면 될까요?어플리케이션 프로세스가 사용했다고 말씀하신 후 윈도우 크기가 이동되었는데, 좌측 경계선은 저장되면 왼쪽에서 오른쪽으로 이동되고, 데이터가 사용되어 오른쪽 경계선이 오른쪽으로 갔다고 이해하면 될까요? 그리고, TCP 혼잡 제어 파트에서 오타가 있습니다. 0:36 시간대에 '이를 통하여 혼자 회피를 합니다' 라고 나와있는데 제가 이해한 바로는 '혼잡 회피'인 것 같은데 맞나요?
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
안녕하세요, 혹시 GameAbilitySystem 강의는 시기가 언제쯤 업로드 되는지 여쭤봅니다
제목과 같습니다.
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
Insight를 사용하려고 하는데 오버플로우가 납니다..
- Live중인 것을 더블클릭하면 - 이 창이 뜨고 가만히 멈춥니다.(클릭도 안되고 닫기도 안됩니다) 그러다가 크래쉬가 납니다. 에러 내용입니다.. (스택오버플로우 입니다..)UnrealInsights_Slate!_chkstk()UnrealInsights_Slate!SScrollBar::Construct()UnrealInsights_Slate!STableViewBase::ConstructChildren()UnrealInsights_TraceInsights!SListView<TSharedPtr<SPacketContentView::FAggregationModeItem,1> >::Construct()UnrealInsights_TraceInsights!SComboBox<TSharedPtr<SPacketContentView::FAggregationModeItem,1> >::Construct()UnrealInsights_TraceInsights!TSlateDecl<SComboBox<TSharedPtr<SPacketContentView::FAggregationModeItem,1> >,RequiredArgs::T0RequiredArgs>::operator<<=()UnrealInsights_TraceInsights!SPacketContentView::CreateAggregationModeComboBox()UnrealInsights_TraceInsights!SPacketContentView::Construct()UnrealInsights_TraceInsights!TSlateDecl<SPacketContentView,RequiredArgs::T1RequiredArgs<TSharedRef<SNetworkingProfilerWindow,1> && __ptr64> >::operator<<=()UnrealInsights_TraceInsights!SNetworkingProfilerWindow::SpawnTab_PacketContentView()UnrealInsights_TraceInsights!TBaseRawMethodDelegateInstance<0,SNetworkingProfilerWindow,TSharedRef<SDockTab,1> cdecl(FSpawnTabArgs const & ptr64),FDefaultDelegateUserPolicy>::Execute()UnrealInsights_Slate!FTabManager::SpawnTab()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreArea()UnrealInsights_Slate!FTabManager::RestoreFrom()UnrealInsights_TraceInsights!Insights::SMajorTabWindow::Construct()UnrealInsights_TraceInsights!SNetworkingProfilerWindow::Construct()UnrealInsights_TraceInsights!TSlateDecl<SNetworkingProfilerWindow,RequiredArgs::T2RequiredArgs<TSharedRef<SDockTab,1> const & ptr64,TSharedPtr<SWindow,1> const & ptr64> >::operator<<=()UnrealInsights_TraceInsights!FNetworkingProfilerManager::SpawnTab()UnrealInsights_TraceInsights!TBaseRawMethodDelegateInstance<0,FNetworkingProfilerManager,TSharedRef<SDockTab,1> cdecl(FSpawnTabArgs const & ptr64),FDefaultDelegateUserPolicy>::Execute()UnrealInsights_Slate!FTabManager::SpawnTab()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreArea()UnrealInsights_Slate!FTabManager::RestoreFrom()UnrealInsights_TraceInsights!Insights::SMajorTabWindow::Construct()UnrealInsights_TraceInsights!SNetworkingProfilerWindow::Construct()UnrealInsights_TraceInsights!TSlateDecl<SNetworkingProfilerWindow,RequiredArgs::T2RequiredArgs<TSharedRef<SDockTab,1> const & ptr64,TSharedPtr<SWindow,1> const & ptr64> >::operator<<=()UnrealInsights_TraceInsights!FNetworkingProfilerManager::SpawnTab()UnrealInsights_TraceInsights!TBaseRawMethodDelegateInstance<0,FNetworkingProfilerManager,TSharedRef<SDockTab,1> cdecl(FSpawnTabArgs const & ptr64),FDefaultDelegateUserPolicy>::Execute()UnrealInsights_Slate!FTabManager::SpawnTab()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreSplitterContent()UnrealInsights_Slate!FTabManager::RestoreArea_Helper()UnrealInsights_Slate!FTabManager::RestoreArea()UnrealInsights_Slate!FTabManager::RestoreFrom() 실행한 배치파일 인데요.. -NetTrace=1 이부분을 지우면 실행시켜도 에러는 뜨지 않지만 , Networking Insights 창이 안뜹니다... 또, 이것 때문인지는 모르겠지만, Connect버튼을 누르면 Error 메서지가 하나 뜹니다..LogTrace: Error: ReadError While reading remote command. Read returned 0:' 또 신기한 것은 처음에 실행을 했을 때는 Networking Insights가 잘 실행이 됐었습니다.. 2번째부터 실행하려니까 스택오버플로우가 나면서 창이 닫힙니다 .. ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SocketAsyncEventArgs 가 연속된 패킷을 모으는 역할을 하나요?
[테스트1]아래 처럼 클라이언트에서 Send를 5번 하는데for (int i = 0; i < 5; i++) { byte[] sendBuffer = Encoding.UTF8.GetBytes($"Hello World! {i} "); int sendByte = socket.Send(sendBuffer); } 강의 결과 화면처럼 서버에서는 5번의 Send 패킷을 모았다가 출력하는 모습을 볼 수 있습니다. [테스트2]아래에서도 마찬가지로 Send를 5번 하는데,1초 딜레이를 주고 실행했습니다.for (int i = 0; i < 5; i++) { byte[] sendBuffer = Encoding.UTF8.GetBytes($"{i} "); int sendByte = socket.Send(sendBuffer); Thread.Sleep(1000); } 이때는 서버에서 패킷을 모을 시간이 없었던건지,Send 패킷을 안모으고 출력하는 모습을 볼 수 있습니다. [질문]서버에서 패킷을 모으는 역할을 하는 것이 무엇인가요?SocketAsyncEventArgs 인가요?그리고 패킷을 모으는 기준이 무엇인지 궁금합니다.시간인가요? 아니면 끊임 없이 연속적으로 보내지는 패킷인가요? 아니면 다른 무엇인가요?SocketAsyncEventArgs recvArgs = new SocketAsyncEventArgs(); recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted); recvArgs.SetBuffer(new byte[1024], 0, 1024);
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
disassembly 창
dissasembly 창을 띄우고 싶은데, 이처럼 설정을 해줘도 창이 띄워지지 않습니다. 이런 경우, 어떻게 해야 하는지 문의드립니다.
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
RemoveItem 함수에서 아이템 포인터를 nullptr로 바꾸기 전에 delete를 하지 않는 이유가 있나요?
강의에 나온 예제 에서는 Clear 함수로 모든 아이템을 delete하는데 이때 RemoveItem 함수에서 이미 nullptr로 지정된 아이템은 따로 delete 연산을 하지 않아서 Clear 이후에 배열의 포인터는 nullptr인데 힙 메모리에는 데이터가 남는 게 아닌가 싶어서 질문 드립니다.실제로 RemoveItem을 실행하는 아니템들을 따로 배열에 모아 Clear 함수 이후에 데이터를 확인해 보니 아이템들이 존제하는 것을 확인 했습니다.bool Inventory::RemoveItem(Item* _item){ if (_item == nullptr) return false; int slot = FindItemSlot(_item); if (slot < 0) return false; //delete mItem[slot]; // 제거되는 아이템 모음 mRemove[mRemoveIndex] = mItem[slot]; mRemoveIndex++; mItem[slot] = nullptr; mItemCount--; return true;}위에 mRemove에 아이템을 모아 Clear 이후에 중단점을 걸어 데이터를 확인해 보니 아이템의 데이터가 남아있는 것을 확인했습니다.혹시 의도적의로 delete연산을 하지 않은 것 인지 궁금하여 질문 드립니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
서버에서는 어떻게 URL을 숨길 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]갑자기 드는 생각인데 팀프로젝트나 기타 협업을 위해 깃허브 같은 사이트에 프로젝트를 올리게 될 경우 서버 주소와 데이터베이스 주소가 노출 될 수 있는데 해당 경우에는 어떻게 URL 데이터를 숨겨서? 올리는 방법은 무엇이 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
onAcceptHandle 추가 위치 질문 드립니다.
_listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _onAcceptHandler += onAcceptHandler; _listenSocket.Bind(endPoint); _listenSocket.Listen(10)위 코드에서 new Socket() 한 뒤에_onAcceptHandler += onAcceptHandler; 로 핸들러를 추가 했는데,아래 코드처럼 Listen() 뒤에 추가 해도 문제 없을까요?_listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _listenSocket.Bind(endPoint); _listenSocket.Listen(10); _onAcceptHandler += onAcceptHandler;
-
해결됨이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
언리얼 데디케이트 서버와 리슨서버 호환성에 대한 질문입니다!
안녕하세요 교수님part 1, part 2를 모두 수강하고 너무 도움이 많이 되어 part 3까지 듣고 있는 클라이언트 지망생입니다~강의를 들으니, 처음 게임을 개발 할 때, 서버를 염두해 두지 않고 개발을 하면 이후에 코드를 수정하는데 많은 시간이 걸리는 것을 이해를 했습니다.그렇다면 리슨서버로 개발을 진행하고, 이후에 데디케이트 서버로 변경을 하려고 하면 이 또한 많은 코드 수정이 필요한가요?정확히 궁금한 것은, 언리얼에 리슨서버와 데디케이트 서버의 호환성이 높은지 아니면 완전히 다른 코드를 사용해서 구현해야 하는 것인지 입니다~~
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강연장 부탁 드리겠습니다...
새로운 회사에 적응 한다고 바빠서 수강을 못했습니다...내년 자격증 취득을 목표로 설정하여 열심히 공부하겠습니다.수강 연장 부탁드리겠습니다..!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
byte[] -> ArraySegment 변환 중 생략 된 부분
더미클라와 서버의 Program.cs에서byte가 arraysegment 부분으로 변환되는게 생략되었습니다.어려운 작업은 아니지만, 뒤에 듣는사람 참고하라고 올립니다. 아닌가.. 내가 잘못한 부분이 있었네 public override void OnConnected(EndPoint endPoint){Console.WriteLine($"OnConnected bytes : {endPoint}");byte[] tempBuff = Encoding.UTF8.GetBytes("Welcome to MMORPG Server!");ArraySegment<byte> sendBuff = new ArraySegment<byte>(tempBuff);Send(sendBuff);Thread.Sleep(1000);Disconnect();} public override void OnConnected(EndPoint endPoint){Console.WriteLine($"OnConnected bytes : {endPoint}");//데이터를 보낸다for (int i = 0; i < 5; i++){byte[] tempBuff = Encoding.UTF8.GetBytes($"Hello World {i}");ArraySegment<byte> sendBuff = new ArraySegment<byte>(tempBuff);Send(sendBuff);}}
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강연장 부탁드립니다ㅠㅠ
안녕하십니까 선생님 강의 정말 잘 듣고있습니다. 올해말에 계속 출장이랑 업무가 바빴어서 수강기간 연장 부탁드려도 될지 말씀 여쭙습니다ㅠㅠ꼭 기간내에 잘 수강해서 자격증 취득까지 이루겠습니다. 감사합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티스레드 프로그래밍에서 디버깅하면서 문제 추적하려면 어떻게 해야하나요?
멀티스레드 병렬 프로그래밍은 싱글 스레드와 다르게 디버깅하기가 매우 까다롭더라구요 ㅠㅠI/O 출력을 하거나 로그 파일로 따로 빼서 로깅을 확인하는건 싱글스레드까지만 가능하고 멀티스레드에서는 별 도움이 되지 못하더라구요이 외에 다른 방법으로는 디버깅 모드로 실행 시 문제가 발생했을 때, memory를 확인하면서 역추적하면서 문제를 해결하는 방법밖에 떠오르질 않는데, 이 방법이 맞을까요?예를 들면 여러 스레드를 실행하면서 call 횟수, 작업하는 변수의 주소값, 수행 시간 등을 list에 저장한 다음에 조사식에 해당 list를 끌어와서 확인해보려고 하는데...현업에서는 멀티스레드 로깅 및 문제 역추적할 때 어떤 방법을 사용하나요..?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
정적 데이터 조회와 동적 데이터 조회 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) : 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요, 정적 데이터 조회와 동적 데이터 조회를 써야하는 경우가 정확하게 구별되지 않아서 질문 남깁니다. 강의에서 정적 파일을 받는 경우 uri에 자원을 명시하고. 동적으로 조회하는 경우에 쿼리파라미터를 사용하는데요.정적 파일을 받는 경우에도 쿼리파라미터를 사용해도 될 거 같은데, 사용하지 않는 이유가 어떤걸까요?예를 들어 정적 파일의 경우는 응답 받은 서버에 이미 저장되어 있는 파일을 반환하고, 동적으로 조회하는 것은 db에 저장된 내용을 불러오는 차이가 있을 것도 같은데요. 요약하자면, 정적 데이터 조회이던 동적 데이터 조회이던 쿼리 파라미터를 사용하도록 해도 될 거 같은데 왜 분리가 되는건지 궁금합니다.
-
미해결비전공자의 전공자 따라잡기 - 네트워크, HTTP
301 리다이렉트 관련 질문입니다!
만약, 리액트를 사용한다고 하면 서버에서 301로 응답이 왔을 때 프론트에서 useNavigation() 훅을 이용해서 응답에 맞게 이동시켜야 하나요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
게이트웨이와 NAT 게이트웨이
안녕하세요?게이트웨이 개념을 익히고 NAT 게이트웨이도 알게 되었는데요두 개의 개념이 혼동이 옵니다..게이트웨이는 통상적인 역할을 하는 큰 개념이고, NAT 게이트웨이는 그중에 복수의 호스트(ex.인터넷 공유기)를 대상으로 NAT 기술을 사용한 게이트웨이로 이해하면 될까요?
-
해결됨풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
CMD, ENTRYPOINT 관련 문의입니다..
안녕하세요 강사님.Dockerfile 작성을 위한 주요명령 익히기4 의 10분 10초 처럼 Cmd의 값이 뒤에 붙지않고 null로 뜨는데,, 로그를 봤을때는 hello /bin/sh hi 로 Cmd 인자가 정상적으로 붙습니다. Dockerfile 은 정상적으로 작성했습니다. 혹시 제가 놓친부분이 또 있을까요? 몇번 강의돌려도 null로 뜨는건 똑같아서..
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
프레임 제한 코드의 원리가 궁금합니다.
윈도우api 메인 루프 부분에서 프레임 제한을 위해 적은 코드의 원리를 모르겠습니다. uint64 prevTick = 0; uint64 now = ::GetTickCount64();if(now - prevTick >= 10) // 요부분!{ // TODO prevTick = now;} sumTick 을 만들어서 특정 시간이 되면 if 문으로 들어가는 것도 아니고 현재틱-이전틱 이 일정값 이상으로 조건을 걸어주는게 어떻게 프레임을 제한하는지 궁금합니다.
-
해결됨풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
docker rmi 관련 문의입니다.
안녕하세요 선생님.docker 주요 명령 익히기6(컨테이너 다루는 다양한 옵션) 8분:25초 에서 해당 이미지를 제하려고하면 하기와 같은 오류가 뜨면서 삭제가 안되는데, 조치할수있는 사항이 있을까요?.. ubuntu@ip-172-31-38-226:~/2021_DEV_HTML$ docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLEImages 4 4 305.5MB 0B (0%)Containers 11 1 28B 26B (92%)Local Volumes 0 0 0B 0BBuild Cache 0 0 0B 0Bubuntu@ip-172-31-38-226:~/2021_DEV_HTML$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest b6548eacb063 12 days ago 77.8MBhttpd alpine 489db2792d7f 13 days ago 59.3MBhttpd latest a6ca7b52a415 3 weeks ago 168MBhello-world latest 9c7a54a9a43c 7 months ago 13.3kBubuntu@ip-172-31-38-226:~/2021_DEV_HTML$ docker rmi httpd:latestError response from daemon: conflict: unable to remove repository reference "httpd:latest" (must force) - container 919738d198d7 is using its referenced image a6ca7b52a415ubuntu@ip-172-31-38-226:~/2021_DEV_HTML$ 감사합니다..