이 서버코드를 가지고 오목게임을 구현해보고 싶은데요 랜덤매칭을 해서 매칭이 된다면 방을 만들어서 방에서 조작하는게 맞겠죠 ? 그럼 GameRoom 은 전체 시스템에 대한 접속이라 생각하고 ( 전쳇말 등등을 위한 ) GameActualRoom 이란걸 만들어서 매칭된사람들끼리의 룸 이라고 생각하고 만들면될까요 ? ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 네트워크 프로그램6 - 자원 정리 를 복습하다가. 질문을 드립니다. 어제 네트워크 네트워크 프로그램 들을 복습하면서 혼자 만들어 보면서 따라하다가 어찌하다 보니 사진 처럼 SessionV4 필드에 private DataInputStream input; private DataOutputStream output; run()에서 객체를 생성하게 되었습니다. 그래서 이것을 코드들에 적용 시켜보자 하다가 이 코드가 나왔습니다. 그래서 질문은 이렇게 코드를 SessionV6에서 짜도 되는 지가 질문입니다. 아니면 영한님 처럼 생성자 에서 전부다 생성하고 초기화 하는게 맞는지 알고 싶습니다. 답변 부탁드립니다.
처음 듣는 개념들이 많아서 글을 정리하며 강의를 보고 있는데, OnRep_Owner 를 Override 해서 사용할 때 Super::PostNetInit() 을 실행해야하는 이유가 있을까요? 아니면 복붙하는 과정에서 일어난 단순 오타인가요? 제가 수업을 놓친 건지 헷갈려서 질문 남깁니다 밑에 같은 질문이 있었네요 오타인 거 확인했습니다. 이번 강의도 감사합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 좋은 강좌 감사합니다 업무에바빠 시험응시를 미루고있습니다 혹시 연장해주시면 감사하겠습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 질문자 OS: mac 영상 기준 위치: 11분 30초 ~ 강의록 기준 위치: 7. 네트워크 - 프로그램1.pdf p.29 ~ 질문 상황: 클라이언트 프로그램을 인텔리제이의 Stop 버튼으로 종료할 때 의 흐름 안녕하세요. 위 상황에 대해서 제가 정리한 흐름이 맞는지 궁금해서 확인차 질문글 남깁니다. 1 ~ 4번의 전체적인 흐름 이 맞는지와 2번의 자동적으로(반사적으로) , 3번의 주체적으로 라는 표현이 적절한지 궁급합니다. 제가 생각한 자동적으로 는 : FIN을 받으면 내부적으로 곧바로 TCP 수신 버퍼가 닫힌다. 제가 생각한 주체적으로 는: if (FIN) then close TCP 수신 버퍼 와 같이 FIN을 조건문처럼 감지하고 수신 버퍼를 닫는다. 입니다. 제가 생각한 흐름 TCP 연결이 끊길 때 클라이언트 OS가 서버 OS에 FIN 패킷을 보내고, 본인의 출력 스트림을 닫는다. 서버 OS는 FIN 패킷을 받으면 자동적으로(반사적으로) TCP 수신 버퍼가 닫힌다. 서버 OS가 TCP 수신 버퍼가 닫힌 것을 주체적으로 인식해서 " readUTF() 에게 이 사실을 알려줘야지!" 라고 하면서 readUTF() 의 블로킹을 깨우는 동시에, EOF 신호도 보낸다. readUTF() 는 서버 OS에 의해 깨어나는 동시에 EOF 신호를 감지하게 되고 즉시 EOFException 을 던진다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니오) [질문 내용] 안녕하세요, 영한님. 해당 강의 후반부에서 데이터베이스를 깊게 학습하는 것이 좋다고 하셨는데 혹시 이를 위한 책을 추천해주실 수 있을까 해서 글을 남겨봅니다. 제 지식 수준 기본적으로 학부에서 오라클을 기반으로 한 데이터베이스 수업을 들어서 설계, SQL 프로그래밍, 인덱스 설계(이론만), locking(이론만) 등에 대해서는 알고 있는 상태입니다. 찾아봤던 책 목록 (원서) Elmasri Navathe 저자의 Fundametals of DATABASE SYSTEMS (국내도서) Real MySQL 제가 조금 찾아보면서 정리한 리스트는 위 두 개의 책입니다. 위의 책 중 마음에 드는 책 아무거나 잡아서 학습할지, 또는 영한님이 따로 추천해주실 만한 책이나 학습처가 있는지 의견을 얻을 수 있을까 싶어 글 남깁니다.
루키스님 안녕하세요? C#서버 강에서 넘어와서 C++서버 공부하고 있습니다. C# 서버와 비교하면서 공부하다 워커 스레드 순서 보장이 궁금해서 질문 드리게 되었습니다. C# 서버에서는 Room.Flush()따위를 메인 함수의 와일루프에서 호출해서 단일 스레드로 처리하기 때문에 순서보장이 되는 것을 직관적으로 이해했습니다. 여기 예시에서는 워커스레드를 5개를 배분해주셨습니다. C# GameRoom으로 빗대면, 긴~~ 작업 Job A와, 짧은 B가 있는데 A->B 순서로 진행이 되어야 한다고 하면, 1번 워커 스레드는 먼저 들어온 A를 처리중.. 2번 워커 스레드가 이어서 들어온 B 작업을 처리.. A보다 먼저 처리 완료. 1번 워커 스레드가 처리중인 A 처리 완료.. 이렇게 B->A 순서로 처리가 될 것 같다는 생각이 들었습니다. Q1. IOCP 워커 스레드가 순서 보장이 되는지? Q2. 그럼에도 불구하고 워커스레드를 N개 하신 이유가 있을 것 같은데 C#도 그렇게 할 수 있을지? 예를 들어 Room의 처리를 1, 2, 3, 4, 5번 스레드를 파서 동시에 처리 할 수 있을지? Q3. C# 서버에서는 Room에 1개의 스레드를 배분한 특별한 이유가 있는지? 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 회원 관리 예제4 오브젝트스트림 에 대해서 복습하는데, ObjectBookRepository 클래스의 add() 에서멤버를 리스트 에 넣고, 오브젝트 안에 리스트를 넣는 방식이 저에게는 생소 하다 할까요? 이 예제 코드를 여러 번 치고 지우다 보니, 머리에 입력은 되긴 했는데. 머리에 입력이 된거지, output은 안 나오는 상황입니다. 이럴 때에는 어떻게 해야하나요? 답변 부탁 드립니다.
풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
안녕하세요 1:42 에 말씀하신 개인 키랑 공인인증서 폴더 가 무엇인가요??? 다운받은 내용이 없는데 폴더도 없습니다. 어디서 찾을수 있나요?? - 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.) - 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 재검토하겠습니다. - 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~ - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 채팅 프로그램 작성 도중 여쭤볼 게 있어 남기게되었습니다 문제 상황 위 사진은 제 콘솔출력창입니다 왼쪽사용자는 kim : hi라는 메시지를 보냈고, 오른쪽 사용자는 han: hello라는 메시지를 보냈는데요, 문제는 메시지를 보내달라는 문장과 다른 사용자가 보낸 메시지 내용이 겹친다는 것입니다 질문 위 사진은 제가 해결해보려는 시도로 static메소드를 lock을 사용해서 만들었습니다. 하지만 결과가 똑같았습니다. 해결방법이 궁금합니다! 그리고 lock을 걸어서 사용했는데 왜 결과가 똑같은지도 궁금합니다...답변해주시면 감사하겠습니다 아래는 제 코드를 보여드리겠습니다! 1.Client 메세지 보내는 부분 클래스입니다 public class ClientSecond { private static final int PORT = 12345; static Socket socket; static DataOutputStream output; static DataInputStream input; public static void main(String[] args) throws IOException { try { socket = new Socket("localhost", PORT); output = new DataOutputStream(socket.getOutputStream()); ClientReceiverSecond clientReceiverSecond = new ClientReceiverSecond(socket); Thread thread = new Thread(clientReceiverSecond); thread.start(); System.out.println("Chatting Program"); System.out.print("사용자의 이름을 입력하세요 : "); Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); output.writeUTF(name); //1.이름전송 while (true) { //System.out.print("메세지를 입력해주세요 : "); ClientOutput.printMessage(); String message = scanner.nextLine(); output.writeUTF(message); //2.메세지전송 if (message.equals("exit")) { System.out.println("채팅 프로그램을 종료합니다. "); break; } } }finally { output.close(); socket.close(); } } } 각 클라이언트에게 다른 사용자의 메세지를 보내는 클래스입니다 public class ClientReceiverSecond implements Runnable { private static Socket socket; static DataInputStream input; public ClientReceiverSecond(Socket socket){ this.socket = socket; } @Override public void run() {//다른 사용자들의 메세지 확인 try { while (true) { input = new DataInputStream(socket.getInputStream()); String other_messages = input.readUTF(); //사용자의 이름과 메시지 분리 필요 //System.out.println(other_messages); ClientOutput.printMessage(other_messages); //todo if (other_messages.equals("exit")) { System.out.println("채팅을 종료합니다. "); break; } } } catch (IOException e) { throw new RuntimeException(e); }finally { try { input.close(); } catch (IOException e) { throw new RuntimeException(e); } } } } 클라이언트와 통신하는 세션 클래스인데요 혹시 몰라서 추가로 올려보겠습니다 public class SessionSecond implements Runnable{ private Socket socket; private SessionManagerSecond sessionManagerSecond; DataInputStream input = null; DataOutputStream output = null; public SessionSecond(Socket soket, SessionManagerSecond sessionManagerSecond) { this.socket = soket; this.sessionManagerSecond = sessionManagerSecond; sessionManagerSecond.add(this); } public void send(String message) throws IOException { output = new DataOutputStream(socket.getOutputStream()); String messages[] = message.split(","); String name = messages[0]; String messagemain = messages[1]; output.writeUTF(name+" : "+messagemain); } @Override public void run() { try { input = new DataInputStream(socket.getInputStream()); //output = new DataOutputStream(socket.getOutputStream()); String name = input.readUTF(); while (true) { String message = input.readUTF(); if (message.equals("exit")) { break; } String allmesaage = name+","+message; sessionManagerSecond.call(allmesaage); } } catch (IOException e) { throw new RuntimeException(e); }finally { try { output.close(); input.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
pop 함수를 보면 if (right < (int)_heap.size() && predicate( heap[next], _heap[right])) 인 left와의 비교에서 나온 결과 값을 비교하는 부분에만 predicate를 적용하였는데 위에 left와 비교하는 부분은 둘 중 더 큰 값을 next에 넣는게 목적인 코드입니다. 더 작은값을 찾을때 문제가 생길 수 있을것이라 생각이 되는데 문제가 생기지 않아 의문점이 생겨 질문 드립니다. left쪽엔 predicate 비교를 하지 않아도 되는 이유가 무엇일까요?
[오타 내용] 대상 강의록 : 2.IO 기본1.pdf 대상 위치 : p.17 최하단 부분 오타 내용 수정 전 : 예를 들어 BUFFER_SIZE가 10이라면 10만큼 모이면 wirte() 를 호출해서 ... 수정 후 : 예를 들어 BUFFER_SIZE가 10이라면 10만큼 모이면 write() 를 호출해서 ... 백준 풀 때 실행 시간 빠른 코드들은 다들 Buffered 어쩌고를 썼길래 이게 뭐지~ 하고 그냥 넘어갔던 기억이 있는데 여기서 마주하게 되어서 기쁘고 재밌네요!
풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
80포트를 이미 사용중이여서 50080을 사용중인데 (iptime에서 포트포워딩 되어 80으로 들어가므로 강의 코드는 계속 그대로 써도 상관없었습니다) 워드프레스 로그인 하니까 50080포트가 사라지면서 80 포트로 되어서 로그인 페이지 처리가 안되는 것 같은데 워드프레스를 잘 모르니까 어디를 고쳐야할지 모르겠네요.. 아마 워드프레스에서 다시 서버 도메인으로 리다이렉션 시키는 부분이 있는 것 같은데 그때 80포트로 시켜버리나봐요..