인프런 커뮤니티 질문&답변

전하늘님의 프로필 이미지
전하늘

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

SendBuffer

Unhandled Exception 에러 질문.(해결완료)

작성

·

64

·

수정됨

0

24.10.29 수정 맨 밑에 해결 방안 적어놨습니다.

저처럼 고생하는 사람 없기를 바랍니다.


 24.10.24?

image.png

socket 이 null인데요.

image.png

 

해당 호출스택입니다

  1.  

    image.png
  2.  

    image.png
  3.  

    image.png

     

  4.  

    image.png
  5.  

    image.png
  6. socket = null

    image.png

     

조사식 캡처본입니다.

image.png

 

 

이전 강의에서도 처음 실행했을 때 네트워크 허용 관련 창이 떴었는데 빠르게 누르면서 뭘 눌렀는지 모를정도로 가볍게 생각하고 넘어갔는데 계속 이런 상황이라 디버깅이 어렵네요.

 

다른 질문에도 Unhandled Exception 나온 분꺼도 읽었는데 일단 기본 테스트니까 넘어가라고 하셔서 했는데도 계속 뜨더라고요.. 4강 강의는 계속 이렇게 무시하고 진행해야 할까요?

 

구글링했을 때 제가 네트워크 허용안한거 같은데 다시 허용 뜨게 하는방법도 모르겠고, 조언 부탁드립니다 ㅠㅠ

 


24.10.27 추가

4번의 호출스택에서 _args.ConnectSocekt이 null 입니다.

_args는 null이 아니고, SocketError는 success로 넘어옵니다.

 

그리고 네트워크 허용 창 같은 경우 방화벽을 다 해제하고도 진행해 봤었는데 그대로이며,

방화벽 다 해제하고, 다시 진행하니까 Sever를 허용 하시겠냐고 창이 떠서 이번에는 허용을 눌렀는데도 그대로입니다..

 

디버깅 모드 하지 않고 실행하면

이러고 끝입니다.

 

Socket Error 조사식.

This protocol version is not supported.

 


저는 작업한것들을 강의마다 git으로 올려두고 있는데 혹시나하고 Session3 26강까지는 정상작동했다가

Session#4 27강에 해당 에러를 발견하게 됐습니다. 이전에 이런 에러가 없었는데.. 원인을 계속 찾아볼게요

 

 


24.10.29 해결

구글링과 gpt를 통해서 찾아봤습니다.

  • 우선 연결할 port(7777)가 없는 것을 확인.

image.png

 

  • 방화벽에서 차단하고 있는지 체크.

image.png

 

 

  • 인바운드 규칙으로 포트 추가.

image.png

 

  • 로컬 Ip를 직접 연결하고, TcpListner를 직접 Start 호출.

image.png

 

코드문제 1. Close 매개변수를 사용하지 않았습니다. 강의 따라가다가 놓친것 같네요..

image.pngimage.png

 

 

코드문제 2. _reserveSize == FreeSzie 같으면 null 일때 문제.

image.png

현재 Open 메서드에서 _reserveSizeFreeSize와 같을 때 null을 반환하도록 되어 있습니다.

이 경우 OnConnected 메서드에서 Array.Copy를 호출할 때 openSegment.Array가 null이 되어

ArgumentNullException이 발생할 수 있습니다.

 

 이제 에러는 안나지만, 서버와 클라의 연결이 계속 안됐습니다.

image.png

이런식입니다.

그러다 멀티쓰레드를 사용하면 시간이 안맞아서 그럴 수 있다고 하더라고요

image.pngimage.png

기존 IPAddress ipAddr을 원복시키고,

Thread.Sleep으로 5초 늦게 연결을 하니까

 

정상작동이 됐습니다

image.png

 

다른 도움이 필요하시면 ChatGPT에 기다려달라고하고 class 전체 복사해서 하나씩 읽게 한 다음에,

문제되는 점을 찾거나 에러 관련 질문을 넣으면 적지않게 도움을 받을 수 있을겁니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
전하늘 님의 질문에 대해 유사한 기존의 질문 및 답변들을 찾아 안내해드리겠습니다.

NullReferenceException은 대부분 객체가 null인데 접근을 시도할 때 발생합니다. 이는 여러분의 코드에서 socket이 의도한 대로 초기화되지 않은 상태에서 접근하고 있다는 것을 의미합니다. 아래 몇 가지 참고할 만한 링크와 요약된 정보를 제공드립니다:

  1. NullReference 오류가 뜹니다

    • 질문자가 NullReference 오류를 만났을 때, PacketManager.Instance가 null임을 확인하고 이를 해결해야 한다는 답변이 제공되었습니다.
    • C#에서 NullReferenceException을 처리하는 첫 번째 단계는 관련 객체가 예상대로 초기화 되었는지를 확인하는 것입니다.
  2. 소켓 null 에러 질문

    • 소켓 프로그래밍 시 null 값을 처리하기 위해 디버깅을 통해 소켓이 null로 설정되는 모든 가능성을 체크하는 방법이 설명되었습니다.
    • 또한, 예상 외의 오류가 발생할 경우에 대비해 관련 코드를 확인하고, 소스 코드와 비교하며 잘못된 부분을 찾아보는 방법이 추천되었습니다.

일반적인 네트워크 허용 문제나 방화벽 문제 역시 실행시에 영향을 줄 수 있습니다. 네트워크 허용 창을 확보하거나 작업을 원활하게 하기 위해서는 처음 실행 시 네트워크 허용 옵션을 올바르게 설정해야 합니다. 혹시 네트워크 허용을 빠르게 지나쳤다면 시스템 방화벽 설정에서 해당 프로세스를 허용할 수 있도록 수동으로 추가해보시길 권장합니다.

질문하신 내용과 관련된 기존의 문제들을 참고해보면서도, 다양한 디버깅 방법을 시도해 보시면 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

전하늘님의 프로필 이미지
전하늘
질문자

해결이 안돼요..

전하늘님의 프로필 이미지
전하늘

작성한 질문수

질문하기