묻고 답해요
137만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트 연동 강의
안녕하세요 루키스님 제가 c++ icop 멀티스레드 환경에서 서버를 제작하고 원래 언리얼로 클라이언트 만들어서 연동하려했는데 자료가 부족해서 유니티 강의를 참고하려고합니다.Part7 : MMORPG 컨텐츠 구현 (Unity + C# 서버 연동)Part9 : MMORPG 컨텐츠 구현 (DB 연동 + 대형 구조 관리 + 라이브 준비)두가지의 강의를 들어보려고하는데 유니티와 c#에 대한 지식이없어도 들을수있을까요?언리얼 연동에 도움이 되는강의가 더 있을까요?Part5 : 데이터베이스(SQL Server) 강의는 수강하려고합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓 프로그래밍 질문 있습니다!
msdn 문서도 찾아보면서 공부 중인데, 제가 이해한 게 맞나 확신이 안가서 질문 드립니다!서버가 계속 listen 상태이고 여러개의 클라이언트들이 연결을 하고 연결을 끊는 과정에서도 서버가 listen 상태를 계속 유지하게 하려면 accept() 함수를 while 문으로 반복적으로 받게 한다 (여러 클라이언트들의 연결을 수용하기 위함) accept() 함수로 백로그 큐에 있던 수신정보?연결대기정보?를 pop하여 새로운 소켓을 생성한다내부에 또다른 while 문으로 생성된 새로운 소켓을 활용해 송수신을 한다accept() 함수를 호출하는 while문 마지막 부분에 생성된 소켓을 close 한다.이렇게 하는게 맞을까요??제가 이렇게 코드를 짠 것 같은데, 서버를 실행시키고 한개의 클라이언트를 실행시켜서 송수신을 하다가 클라이언트를 종료시키면 서버도 같이 종료되는 것 같아서요...여러 클라이언트를 실행시켜도 처음 실행시킨 클라이언트만 송수신이 가능하더라구요 ㅠㅠ(제가 코드를 잘못 짠 걸수도 있습니다 ㅎㅎ;;)아래는 서버와 클라이언트의 주요 소스코드 부분입니다[Server]// 윈속 초기화와 socket(), bind(), listen() 함수 생략 while (1) { // accept() clntAddrSize = sizeof(clntAddr); clntSock = accept(listenSock, (SOCKADDR*)&clntAddr, &clntAddrSize); if (clntSock == INVALID_SOCKET) ErrorHandling(L"accept() error"); // 접속한 클라이언트 정보 출력 wprintf(L"\n[TCP 서버] 클라이언트 접속 : IP 주소 = %s, 포트 번호 = %d\n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port)); // 클라이언트와 데이터 통신 while (1) { recvLen = recv(clntSock, (char*)message, sizeof(message), 0); if (recvLen == SOCKET_ERROR) ErrorHandling(L"recv() error"); else if (recvLen == 0) break; // 받은 데이터 출력 message[recvLen / 2] = L'\0'; wprintf(L"[TCP/%s:%d] : %s\n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port), message); // 데이터 보내기 strLen = wcslen(message) * sizeof(wchar_t); if (send(clntSock, (char*)message, strLen, 0) == SOCKET_ERROR) ErrorHandling(L"send() error"); } closesocket(clntSock); wprintf(L"[TCP 서버] 클라이언트 종료 : IP 주소 = %s, 포트 번호 = %d\n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port)); } closesocket(listenSock); WSACleanup();[Client]// 윈속 초기화와 socket(), bind() 함수 생략 // connect() if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling(L"connect() error"); else { printf("Connected...........\n"); } // 서버와 데이터 통신 while (1) { // 데이터 입력 wprintf(L"data input : "); if (fgetws(message, BUF_SIZE, stdin) == NULL) break; // '\n' 문자 제거 strLen = wcslen(message); if (message[strLen - 1] == L'\n') { message[strLen - 1] = L'\0'; strLen--; } if (wcscmp(message, L"q\n") == 0 || wcscmp(message, L"Q\n") == 0) break; //데이터 보내기 recvLen = 0; recvLen = send(hSocket, (char*)message, strLen * 2, 0); if (recvLen == SOCKET_ERROR) { ErrorHandling(L"send() error"); break; } printf("[TCP 클라이언트] %d 바이트를 보냈습니다.\n", strLen); while (recvLen < strLen * 2) { recvCnt = recv(hSocket, (char*)&message[recvLen / 2], BUF_SIZE - 1, 0); if (recvCnt == SOCKET_ERROR) { ErrorHandling(L"recv() error"); break; } else if (recvCnt == 0) break; recvLen += recvCnt; } message[strLen] = L'\0'; printf("[TCP 클라이언트 %d 바이트를 받았습니다.\n", strlen); } closesocket(hSocket); WSACleanup();
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
제공한 기출만 보고 시험봐도 괜찮을까요?
선생님이 제공해주신, 기출만 보고덤프에서 나오는 c03 문제는 안 보고 시험 보러 가도 될까요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
프로세스간 연결시에 질문
프로세스간 연결시 왜 ip를 통해서 가나요?(그러니까 소켓열어서 파일 입출력하는 이유가 무엇인가요)그냥 memory를 공유할 수 잇는 방법이 잇으면 더 빠를거같은데보조기억 장치 메모리를 공유할 수 잇는 방법이 어렵거나 불가해서 저렇게하는건가요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
tcp 관련하여 질문드립니다
안녕하세요 선생님^^tcp 관련하여 궁금한 점이 있습니다tcp는 왜 굳이 segmentation을 하나요? segmentation을 하지 않아도 ip에서 fragmentation이 일어나니까 딱히 안해도 상관없지 않나 싶은데요...2-way handshake는 아예 사용되지 않는 기법인가요?3-way handshake에서 한 클라이언트가 서버에게 다수의 syn을 보내게 되면, 서버는 이를 어떻게 처리하나요? 중복임을 인지하고 하나의 syn을 제외한 나머지는 모두 드랍하나요?궁금한건 많은데 글로 정리하는게 너무 어렵네요~~;;물론 답변해주시는 선생님도 마찬가지시겠지요~노고에 감사드립니다^^
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
서브넷 마스크에서 == 연산 질문
비트 연산이 === 보다 빠른지 아닌지 궁금합니다c언어 공부할때 비트연산이 더 빠른 것으로 기억하는데아무리 컴퓨터가 좋아져도 네트워크 빠르게 동작하려면 비트연산 사용하는게 좋지 않을까 하는 의문이 들어 질문 드립니다.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
socket의 생성시점에 관하여
선생님! 안녕하세요.Server쪽 Socket의 생성 시점에 관하여 궁금한 점이 있습니다.질문)Server쪽 Socket은 무엇이 Trigger가 되어 Socket이 Create되고 Open되는지 궁금합니다.Client와 Server가 통신을 하기 위해선 우선 서로 Socket이 생성되어야 합니다.Client쪽에서 Process가 통신을 하기 위해 운영체제에게 요청하여 Socket을 생성(혹은 개방)한다는건 알겠습니다. 즉 Process의 요청이 Trigger가 되어 Socket이 생성이 되는거죠.그리고 Client에서 Socket이 만들어지면 Server로 요청이 가는데 이때 Server쪽 Socket이 Listen 즉 연결 대기 상태가 아니라면 Kernel의 TCP에서 연결을 받아줄 Socket이 없어서 응답을 못받아준다고 설명하셨습니다. 그럼 Server쪽에서는 Socket을 Create하고 Open되어 Listen 상태가 되어있어야 하는데 이는 무엇이 Trigger가 되어 만들어지는 건가요? 그니깐 Client에서 최초 요청을 보낼 때 Server는 이때 처음 Client에게서 요청이 온건데 그러면 당연히 Client와 통신할 사실을 모르고 있을거기 때문에 Process가 Socket을 생성해놓지 않았을거고 그러면 응답이 거부되는 상황밖에 안생기는데 이는 뭔가 아닌거 같아서요.Client에서 Server에 Socket을 만들어라는 뭔가 모르는 Trigger가 있는건가요? (나름 열심히 작성했는데 글 솜씨가 부족하여 제 질문의 의도를 파악하실지 모르겠습니다ㅠ)
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
[문의][SAP-C02 취득]추가 필요 학습 내용
강사님 덕분에 오늘 SAA 취득했습니다.. 감사합니다..^.^바로 SAP 취득 준비할려고 하는데, 강사님 강의 내용 대비 추가로 각 서비스별 어떤 내용을 더 심화 학습해야 하는지 혹시 가이드해 주실 수 있는지 문의 드립니다..그리고, SAA & ANS 외에 추가 강의 검토 중에 하셨는데, 혹시 구체화 된 사항 있으면 같이 답변 부탁 드립니다..
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
데드락 어떻게 해결할 지 궁금합니다.
안녕하세요. Rookiss 강사님.덕분에 강의 아주 감사히 잘 들어가며 배우고 있습니다.다름이 아니라, 강의 중, 데드락 프로파일러를 이용하여, lock 간 사이클 여부를 확인하여사전에 어느 정도 사전에 예방 가능하지만 그래도 다 막을 수는 없다고 하셨는데,막상 발견된다면 데드락을 해결하는 것은 어렵지 않다고 알려주셨습니다. 혹시, 데드락 프로파일러를 통해 발견되지 않을 경우,데드락이 발생했는지 어떻게 확인하고, 데드락이 발견되면 어떻게 해결하는 지 궁금합니다. 스스로 생각하기로는 스핀락의 경우, 데드락이 발생하게 되면 뺑뺑이를 계속 돌게 될테니CPU가 증가하는 모습으로 나타날 것으로 보이려나 싶네요 혹여나 강의 중에 설명 주셨는데, 재질문 드리는 거라면 정말 죄송합니다.항상 좋은 강의 감사합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
std::future에서 사용되는 쓰레드의 개수
std::future에서 비동기적으로 함수를 처리하기 위해서 사용하는 쓰레드는 미리 생성된 쓰레드를 통해서 처리하는 건가요?만약, 미리 생성된 쓰레드를 통해서 처리한다면 미리 생성된 쓰레드의 개수는 알 수 있나요? 그리고 해당 쓰레드의 개수도 수정할 수 있을까요?답변 부탁드립니다. 감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
실무에서 캐시 처리를 할 때 질문입니다.
안녕하세요 캐시 강의 듣다가 궁금한점이 생겨서 질문하게 되었습니다.https://www.inflearn.com/questions/112647/no-store-%EB%A1%9C%EB%8F%84-%EC%B6%A9%EB%B6%84%ED%95%A0-%EA%B2%83-%EA%B0%99%EC%9D%80%EB%8D%B0-no-cache-must-revalidate-%EB%8A%94-%EC%99%9C-%EA%B0%99%EC%9D%B4-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80%EC%9A%94위 링크를 참고했는데요~캐시 기능에 대해 여러 클라이언트 환경을 지원하는 셋팅을 하려면 캐시를 사용할 대상 (정적 리소스)에 헤더에는 no-cache, must-revalidate, etag를 걸어주고, 캐시를 사용하지 않을 대상에는 no-cache, no-store, must-revalidate를 걸어줘도 성능상 단점이 없을까요? HTTP 헤더에 값을 넣으려면 여러가지 방법이 있는데 interceptor를 이용해도 성능상 단점이 없을까요?Thymeleaf에서 prefix, suffix 설정을 하여 viewResolver가 view를 찾으면 캐시된 값에 대해 304 응답코드를 반환하는 반면에, 설정하지 않으면 200 (디스크 캐시, 메모리 캐시) 응답코드가 반환됩니다.. 무슨 차이가 있는건가요?
-
해결됨자동차 SW - UDS 진단통신 정복하기
메세지 바이트가 8 바이트 초과시 전송 방법 문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.서비스 ReadDTCInformation : DTC 기록 읽기 - SnapShot Data 수업 듣다가 데이터 크기가 8바이트 넘으면 CAN 또는 LIN은 전송을 어떻게 하는지 의문이 들어서 문의 드립니다.강의 내용 중 예를 들어Snapshot Record Num 이 많으면 뒤에 붙는다고 하셨는데 그럼 데이터 바이트 크기가 8 바이트 넘어 어떻게 전송이 되는걸까요?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
실전문제풀이 02_7번 문제 정답 재확인
안녕하세요. 실전문제풀이 02_7번문제가 다음 ExamTopics 문제와 동일합니다..-. https://www.examtopics.com/discussions/amazon/view/94990-exam-aws-certified-solutions-architect-associate-saa-c03/그런데, ExamTopics에서 다음과 같이 D과 최다투표로 정답 표시되어 있습니다..강사님, 정답 재확인 부탁 드립니다. 미리 감사드립니다...D. 프런트엔드 계층과 애플리케이션 계층에 로드 밸런싱된 다중 AZ AWS Elastic Beanstalk 환경을 사용합니다. 데이터베이스를 Amazon RDS 다중 AZ DB 인스턴스로 이동합니다. Amazon S3를 사용하여 사용자 이미지를 저장하고 제공합니다. 최다 투표
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
단편화에 관하여
선생님. 안녕하세요! 단편화 수업을 듣고 궁금점이 생겨 질문드립니다.질문1수업에서 단편화는 가급적 발생하지 않는게 좋다고 하셨습니다. 그 이유가 Packet 한 개 보낼걸 두 개로 보내면 네트워크 통신 비용이 더 나가기 때문이라고 봐도 될까요?질문2단편화를 발생시키지 않는 방법으로 처음부터 PC쪽에서 단편화를 발생시키는 Router의 MTU인 1400bytes로 보내는 방법을 말씀 해주셨습니다.예를 들어 PC쪽에서 보낼 데이터의 크기가 1500bytes이고 Router의 MTU는 1500bytes, 단편화를 발생시키는 Router의 MTU가 1400bytes라고 가정해보겠습니다. 방법1)그럼 위에서 말한 방법대로 1400bytes로 보내면 1400bytes -> 100bytes 이렇게 보내면 단편화는 일어나지 않지만 데이터를 두 번 보내야 합니다. 방법2)근데 PC에서 1500bytes로 보내면 단편화는 일어나겠지만 데이터는 한 번만 보내면 됩니다. 그럼 질문1에서 Packet을 단편화 시키는데 네트워크 비용이 증가하는게 맞다면 어떤 방법1과 방법2 중 어떤것을 선택하든 장점과 단점이 발생하는게 아닌가요?
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
강사님 강의를 베이스로 blue green을 적용해보려하는데요.
version: "3" services: web-server: image: nginx container_name: nginx restart: always ports: - "80:80" - "443:443" volumes: - ./nginx/:/etc/nginx/default.conf.d/ blue: image: test-express container_name: testserver_blue restart: always expose: - "8080" volumes: - ./:/home/ec2-user - /etc/localtime:/etc/localtime green: image: test-express container_name: testserver_blue restart: always expose: - "8080" volumes: - ./:/home/ec2-user - /etc/localtime:/etc/localtime요게 제가 작성한 docker-compose.yml 파일입니다 . 근데 이부분을 실행하다보면 .. repository does not exist or may require 'docker login': denied: requested access to the resource is denied요 에러가 발생해서 도커로그인은 정상적으로 ec2에서 되어있는데.. 왜 그런건지를 이해를 못하겠어요. 그리고 Error: No such container: nginx 요게 자꾸떠서 이미지를 nginx를 docker pull nginx로 받아두었는데 왜 이런 이슈가 생기는지를 모르겠습니다 .. 답변부탁드릴게요 ㅠㅠ
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
[질문] IPSec VPN과 터널링 개념 - 네트워크 속도
안녕하세요, 강사님. 쉽게 설명해주셔서 강의 잘 듣고 있습니다. IPSec을 사용하여 VPN 터널링을 구현하면 IP 헤더와 IP 페이로드가 암호화되어 데이터를 안전하게 전송할 수 있다고 배웠습니다. 하지만, [1] IPSec을 사용하면 추가 헤더 정보가 필요하므로 패킷 크기가 늘어나서 네트워크 오버헤드를 증가시켜 속도를 느리게 만들 수 있을것 같습니다. [2] 또한, 새로운 패킷을 추가/삭제/수정 하는 과정 또한 네트워크 속도에 영향을 끼칠것 같은데요. Q1. 위의 내용이 제가 잘 이해한게 맞을까요?Q2. 그럼에도 불구하고 IPSeC VPN이 널리 사용되는 이유가 있을까요? 미리 답변 감사드립니다 :)
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
중간자 공격에 대해 질문드립니다
안녕하세요 선생님~^^강의를 마치고서도 꾸준히 네트워크 공부를 하고 있는데요,아는 분께 질문받은 내용인데 도저히 답이 안나와서요~~;;arp spoofing하고 icmp redirect 공격을 어떻게 막을 수 있는 지에 대한 질문이었는데이를 호스트가 자체적으로 막을 수 있는 방법이 있나요?제 생각엔 없을 듯한데... 테이블을 보고 의심 정도는 해볼 만하겠다 생각합니다만만약 100% 구분해낼수 있는 방법이 있다면 뭐가 있을까요?아무래도 다른 보안 장비가 필요할런지요?선생님의 지혜를 빌리고 싶습니다. ^^ 여담으로... 최근 유튜브에 올리신 글을 보았는데저또한 비교적 비싼 값에 강의를 구매했지만딱히 박탈감을 느끼거나 하진 않습니다. ^^아깝다는 생각이 들지 않아서 그렇겠지요양질의 강의에 감사드리며~ 강의 흥행 축하드립니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
싱글스레드가 안전한 이유?
싱글 스레드가 멀티스레드 이슈로부터 안전한게 다른 스레드의 개입이 없어서라고 알고있습니다.멀티코어 다중 스레드 PC에서 싱글스레드 프로그램을 동작시킨다 가정합니다.싱글스레드 환경에서 메인스레드 한개만 동작할것이고 스레드 아이디가 123이라 치고싱글 스레드 환경에서 변수 a가 있다치고 무한루프로 증가 시킨다고 칠때 컨텍스트 스위칭이 일어나도 a라는 변수는 무조건 스레드 아이디 123이고 같은 코어에 있는 스레드가 동작시키는 건가요??컨텍스트 스위칭 과정에서 운영체제가 스레드를 맘대로 할당해 주는 것으로 알고 있는데 다른 코어에 잇는 스레드를 할당해 줄수도 있지 않나해서요.그럼 다른 코어에 있는 캐시 등에 접근 가능하여 가시성, 코드 재배치 문제가 잇지 않을까합니다
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
바이트 오더 정렬 안 해도 상관없나요?
패킷 코드를 봐도 딱히 호스트,네트워크 간의 바이트 정렬은 하지 않던데내부에서 간단히 테스트할 꺼라 처리를 하지 않으신 건가요? 아니면 다른 방법으로 하셨는데 제가 못 찾는 걸까요
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
null체크후 clientSession.Room을 참조하면 Push 할때 null이 넘어갈수 있는거 아닌가요?
안녕하세요. 강의 열심히 보고 있습니다. ^^JobQueue #1 강의중 19분51초에서..멀티스레드 환경에서14줄에서 null 체크를 하고접속이 해제된다면17줄에 room을 넣을 때null이 반환되지 않을까요?? 검색해봐도 해당 내용은 없는거 같아서 질문 드립니다.