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

김승훈 Kim님의 프로필 이미지

작성한 질문수

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

Listener

AcceptAsync() 수행시 항상 오류...

작성

·

566

0

안녕하세요

마지막 DummyClient에서 ServerCore로 계속해서 요청 보내는 부분에서 이상한 에러가 나서 문의드립니다.

ServerCore 쪽에서는 RegisterAccept에서 pending이 True 로 반환되고, DummyClient에서는 Connection refused Exception이 발생하네요 ㅠ

System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (61): Connection refused 192.168.35.35:7777
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at DummyClient.Program.Main(String[] args) in /Users/hun/Projects/Server/DummyClient/Program.cs:line 28

혹시 의심될만한 부분이 있을까요?

답변 3

3

Rookiss님의 프로필 이미지
Rookiss
지식공유자

모든 접속이 다 실패하는 것인지,
아니면 일정 확률로 몇몇 접속만 실패하는 것일지가 관건일 것 같네요.

모든 접속이 다 막힌다면 IP 설정 문제일 확률이 높고,
DNS을 이용하지 않고 IP를 직접 코드에 박아서 테스트를 해볼 필요가 있을 것 같네요.

반면 몇몇 접속만 실패한다면 단기간에 접속 횟수가 너무 많아서 그런 것인데,
특별히 이상한 상황은 아니고 Listener backlog을 늘리거나 
Connector 쪽에 적당한 Thread.Sleep로 텀을 두고 시도 바랍니다.

1

김승훈 Kim님의 프로필 이미지
김승훈 Kim
질문자

몇가지 확인을 해봤는데, AcceptAsync() 후에 이벤트를 트리거 하는 부분이 Mac 환경에서 정상적으로 동작을 하지 않는 것 같습니다 ㅠ

동기적으로 처리할땐 아무런 문제가 없이 동작하지만 비동기로 처리하면 Connection까지는 맺고 ServerCore쪽에서 아무런 응답이 없네요 ㅠ

혹시나 해서 동일한 코드를  윈도우 환경에서 돌려봤는데 잘 작동하네요 ㅠ 

그리고 위에 말했던 Connection refused 에러는 AcceptAsync() 가 true 반환한 뒤에 소켓 연결을 요청하면 항상 발생하는 것 같네요 ㅠ 텔넷같은걸로 연결하려고 해봐도 동일하게 오류가...

평소 게임을 좋아해서 이번에 본격적으로 게임개발을 해보려고 강의를 듣고 있는데 기초부터 차근차근 알려주셔서 너무 좋은 것 같습니다.

앞으로도 잘 부탁드려요~ :)

상당히 과거의 질문이지만 저도 동일 문제로 헤매다가 혹시나 다른 분들께 도움이 될까 싶어 문제 해결후 답변 남깁니다

저도 mac 환경이었구요

저같은 경우는 해당 오류가 이전 강의인 소켓 프로그래밍 입문#2에서 더미클라이언트와 서버코어가 connect를 시도할 때 발생했습니다

방화벽 문제인가 싶어서 확인해봐도 아니었습니다

결론은 터미널을 통해 서버코어 및 더미 클라이언트의 권한을 늘려주니 서로 소통하더라구요

++ 순서문제일 수도 있을 것 같습니다. 이후에 또 해당 문제가 발생하여 비주얼 스튜디오가 아닌 vscode를 통해 serverCore를 선 실행, 이후 dummy를 실행시키면 테스트 하는 동안 한 번도 해당 문제가 발생하지 않았습니다

선생님께서 알려주신대로 dummy쪽에 sleep을 길게 주고 동시 실행해도 문제가 발생하지 않았구요

혹시 터미널에서 어떤 식으로 권한을 늘려줬는지 알려주실 수 있을까요? 저도 Accept는 잘되는데 비동기 Accept만 하면 같은 현상이 발생해서 여쭤봅니다.

답변이 늦었네요

터미널에서 chmod 명령어로 사용하는 소스코드 파일들에 읽기/쓰기/실행 권한을 부여하였습니다.

https://www.inflearn.com/chats/608603

socket.acceptAsync와 관련하여 다른 문제 해결도 자유주제 게시판에 적어놓은 것들이 있으니 혹 도움이 되시면 좋겠습니다

 

++계속 맥을 이용하신다면 아마 뒤의 강의에서 배치파일을 이용할 때도 문제가 발생하실 것입니다

https://www.inflearn.com/chats/626688

배치파일 관련하여 부딪혔던 다른 문제에 대한 게시글도 혹시 몰라 첨부합니다

 

답변 정말 정말 감사드려요!!

1

김승훈 Kim님의 프로필 이미지
김승훈 Kim
질문자

아, 참고로 Mac 에서 수행했습니다. 이게 관련이 있을 지 모르겠네요;