프로그래밍/의문
-
친구와 각자의 집에서 tcp 연결을 하려는데 연결이 안 되던 문제프로그래밍/의문 2016. 4. 4. 14:03
4월 3일 일요일 밤, 우리는 서로의 컴퓨터에 연결을 하기로 했다.클라이언트는 유니티5로, 서버는 c++로 된 서버였다. 우리 둘은 멀리 떨어져있었고(적어도 같은 동네는 아니다.), 기현은 포트포워딩을 했기에 121.88.185.23:6001로 연결을 요청하면, 연결이 될 거라고 했지만 안 되었다.원인을 찾지 못해 접속 부분까지만 클라이언트를 빌드하고, 기현에게 넘겨줬다.기현은 외부 아이피를 네이버를 통해 확인했다고 하는데 그게 잘못된 건지 의심하고 있다.그리고 우린 일단 피곤해서 잠을 자러 감. --- 다음날 문제는 인증 서버(account)의 ip를(클라이언트 입장에서 최초 접속하는 서버) 외부 아이피로 해서 서버를 열었었는데,사실 내부 아이피로 서버를 열어야 했던 것이었다.그래야 포트포워딩이 되어 ..
-
유니티 클라이언트 수신 처리 건프로그래밍/의문 2016. 3. 30. 14:56
내 생각에는 0. 비동기 수신 등록 1. 수신 콜백에서 패킷이 완성 되었으면 스레드에 안전한 큐에 삽입 (라이브러리 단에서 제공하는 동시성이 고려된 큐던, 뮤텍스로 래핑한 큐던..)2. 메인 스레드에서 큐에 있는 완성된 패킷들을 꺼내서 하나씩 처리 를 하면 될거라 생각하는데, 유니티를 막 배우는 상황이다보니 보통은 어떻게 처리하는지 모르겠다. 검색을 해봐도 제각각으로 하는 느낌이라.. -_-; 송신은 BeginWrite를 통해서 완전 비동기적으로 하고, 수신 처리는 DataAvailable을 검사하고 가져오는 식으로 하면 편할 거 같은데 퍼포먼스 차이가 있을려나?그게 아니라면 스레드 세이프한 큐가 있어야 하는데 유니티 버전의 c#은 System.Collections.Concurrent가 없는 듯 하다. ..
-
유니티 json(JsonUtility) 송신 => c++서버 json 수신프로그래밍/의문 2016. 3. 29. 14:33
Json Utility는 유니티 5.3 버전에서의 추가된 사항으로, 유니티에서 직접 제공하는 json 라이브러리입니다.외부 라이브러리를 사용하지 않고도 json 작성을 가능하게 합니다. 이전 버전에서 json을 사용하려면 외부 라이브러리를 썼다고 하는데 기기에 따라 호환이 안 되는 경우가 많아,게임 하나에 json 라이브러리만 2개 이상인 경우도 많았다고 합니다. #클라이언트 사이드- 유니티 5.3버전 JsonUtility 사용 #서버 사이드- boost/property_tree/json_parser 사용 #유니티 클라이언트 코드 0) 프로토콜 정의12345678 namespace Json { public class ReqLogin { public string id; public string pw; } ..
-
국내에서 ipv4 주소를 접하기 어려운 이유프로그래밍/의문 2016. 3. 27. 23:32
미 인터넷 번호 등록 협회(ARIN, American Registry for Internet Numbers)에 의하면, 2015년 9월 24일 ipv4 기반 인터넷 번호가 고갈되었다고 한다. 21세기에 들어 다양한 사물에 ip가 보급되었는데 모두 고유한 ip를 제공하기는 어려워졌다.그럼에도 불구하고 ipv6으로의 전환이 더딘 이유는, 0) 새로운 프로토콜을 사용할 준비가 안 된 사용자들이 꽤 많음(ipv6은 ipv4 기기들과 하위 호환이 불가능) 1) isp나 자체 인터넷 서비스를 하는 기업들의 경우 변화 과정에서 서비스가 지연되거나 웹 접근이 차단되어 버리는 사고가 발생할 수 있음. 등이 있겠다. 결국 당장은 전환에 따른 리스크가 더 크기 때문이라고 할 수 있다. 소비자 입장에선 v4에서 v6으로의 전..
-
ptrdiff_t가 두 포인터 간의 거리를 완벽하게 표현하기엔 적합하지 않은 거 같은데 어떻게 생각하시나요?프로그래밍/의문 2016. 3. 13. 19:53
내가 kldp에 올린 글: https://kldp.org/node/151149 질문 예를 들어 두 포인터가 현 시스템에서 표현 가능한 메모리 주소의 처음과 끝을 가지고 있을 때두 포인터 간 거리를 위해 메모리주소의끝 - 메모리주소의처음을 할 경우에 문제가 생길 수 있기 때문에적절하지 않다고 생각합니다.일반적으로 저런 경우는 없겠지만(64비트 시스템에선 더더욱) 완벽하게 포인터 거리를 표현하기엔 적합하지 않다고 생각하는데 어떻게 생각하시나요? 답변들ptrdiff_t는 포인터 연산을 위한 것이고,글쓴이: xylosper 작성 일시: 일, 2015/02/08 - 5:20오후ptrdiff_t는 포인터 연산을 위한 것이고, 포인터연산은 연속 할당된 배열의 주소끼리의 연산에서만 의미가 있습니다. 모든 주소 공간을 ..
-
[c++] static 변수의 초기화 시점프로그래밍/의문 2016. 2. 22. 09:09
함수의 정의된 static 객체 => 함수가 처음 호출되는 시점에 인스턴싱 123456static any_class& get(){ static any_class instance; return instance;} cs 클래스에 정의된 static 객체 => 명확한 스펙이 없음 12345class any_class{//... static any_value value;};cs 따라서 정적 메모리에 존재하는 변수들의 초기화 시점을 제제하는 유일한 방법은 모든 정적 메모리 변수를 하나의 변환 단위에 넣어주며, 헤더에 모두 extern 키워드를 사용하는 방법이 최선이다. 출저 more effective c++ http://en.cppreference.com/w/cpp/language/initialization