socket과 stream을 닫는 시점이 궁금합니다.
293
작성한 질문수 1
안녕하세요. 강의 잘 보고 있습니다.
클라이언트 측에서 TcpClient로 생성한 socket과 stream의 해제 시점이 궁금해서 질문 남깁니다.
TcpClinet socket = new TcpClient(Ip, Port);
var stream = socket.GetStream();
Request(); // 서버로 한번 요청 보냄.
Response() ; // 서버로부터 응답받음.
// 이후 500ms 간격으로 요청없이도 응답이 계속 옴.
.
.
1. 위와 같이 [요청->응답->응답...] 식으로 한번만 요청하면 이후 지속적으로 특정단위의 데이터가 응답이 되는 시스템의 경우,
클라이언트에서는 소켓을 일단 닫고 다시 열어야 하나요, 아니면 이 경우에는 소켓을 닫을 필요가 없는건가요?
2. 덧붙여 [요청->응답->요청->응답 ...] 이 500ms로 계속 반복되는 경우에는 해제 시점이 언제일까요?
위의 2가지 경우 모두 socket과 스트림을 해제를 하지 않으면 StackOveflowException이 발생할 거 같은데,
해제를 안해도 되는지, 해야된다면 시점이 언젠지 궁금합니다.
답변 1
1
1. 클라에서 소켓을 닫으면, 서버에서 더 이상 클라한테 메시지를 보낼 수 없게 됩니다.
그러니 게임 TCP 통신 방식에서는 처음에 소켓 연결이 이루어지면,
네트워크 연결이 필요한 동안엔 쭉 들고 있어야 합니다.
2. StackOverflow는 말 그대로 스택 버퍼가 다 찼을 때 발생하는 것이고,
주로 memcpy등 C++ 복사 실수나, 재귀함수 과다 호출로 인한 StackFrame 초과 등의 대표적 이유가 있습니다.
네트워크 요청/응답에서 한 번 보내고/수신 처리한 데이터는 영구적으로 유지되지 않을뿐더러
특별히 스택에서 관리되는 데이터도 아니라서 StackOverflow랑은 크게 연관이 없습니다.
보통 MSDN 예제에서는 네트워크 연결해서 데이터 한 번 보내고 종료하는 간단한 루틴으로 이루어져 있으니
데이터를 보낸 다음에 바로 리소스 정리를 해주지만,
게임처럼 장기간 유지되는 프로그램에선, 정말 프로그램이 종료되기 전에만 정리를 해주시면 됩니다.
TLS 질문드립니다.
0
43
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
46
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
104
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
145
2
유니티6 버전
0
97
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
190
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
82
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
105
1
스핀락 질문.
0
110
2





