inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Socket의 Disconnect 해주는 부분에 대해 궁금합니다.

132

choh3722

작성한 질문수 2

0

강의들이나 블로그를 보아도 소켓의 연결을 유지해주는 경우는 Receive 부분이나 Send 부분에서 ByteTransferred <= 0 이거나 SocketError != SocketError.Success가 아닐 경우에 Disconnect를 하게 되어있는데 온라인 서버에서는 원래 이렇게 구성을 해주는건가요?
이 경우엔 계속 패킷을 보내고 받지 않으면 연결이 끊기는거같아서 ..

C# unity 네트워크

답변 2

0

Rookiss

네 원래 그렇게 구성하는게 맞습니다.
실제로 BytesTransferred = 0인 경우는 정말로 연결이 끊긴 것입니다.
예외적으로 C++로 만들 경우 가끔 zero byte recv라는 전략을 쓰기는 하지만
C# 서버에선 그냥 100% 끊긴 상황입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

choh3722님, 소켓의 연결 관리에 대해 질문해 주셨군요. 소켓의 연결을 유지하고 종료하는 조건은 네트워크 프로그램 설계 시 매우 중요합니다. 일반적으로 소켓 통신에서는 BytesTransferred <= 0 혹은 SocketError가 발생한 경우 연결을 끊는 방식을 많이 사용합니다. 이는 상대방이 명시적으로 연결을 종료했거나, 네트워크상에서 문제가 발생한 경우를 감지하기 위한 조건입니다.

소켓 통신에서 패킷을 주고받지 않으면 연결이 끊긴다고 생각하시기 쉽지만, 지속적인 연결 유지를 위해 주기적으로 heartbeat 패킷(또는 keep-alive 패킷)을 보내는 방법도 있습니다. 이는 서버와 클라이언트가 정기적으로 서로의 생존 여부를 확인하여 의도치 않은 연결 끊김을 예방하는 방법입니다. 이는 특히 TCP/IP 네트워크에서 흔히 사용됩니다.

다음 게시물도 choh3722님에게 도움이 될 수 있을 것 같습니다:
1. 서버쪽 OnRecvCompleted에 SocketError.ConnectionReset
2. 질문이 있습니다

위 링크들은 소켓 연결 관리와 관련된 다양한 상황과 해결 방안을 토론하고 있습니다. heartbeat 패킷을 어떻게 구현할 수 있는지, 그리고 소켓 연결을 안정적이고 지속적으로 유지하기 위한 다양한 기법들을 이해하는 데 도움이 될 것입니다.

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

TLS 질문드립니다.

0

43

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

48

2

Unity Span

0

76

2

XML, Dll 차이점

0

105

2

Session 질문입니다

0

79

1

Write Read 커서 키워드

0

76

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

70

2

네트워크 Send 전담 스레드 배치

0

98

2

UnhandledException 으로 서버 터지는 경우

0

85

2

컨텐츠 단, 엔진 단

0

106

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

147

2

유니티6 버전

0

98

2

receive하는 부분과 send하는 부분의 차이

0

134

2

커서의 위치의 중요성

0

103

2

C++ 전혀 모르는데 C# 서버

0

169

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

130

3

OnAcceptHandler 액션 함수

0

61

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

192

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

82

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

106

1

스핀락 질문.

0

110

2