질문 있습니다
73
11 asked
강의와 똑같은 코드로 실습을 하고있는데요, 서버와 유니티의 통신이 되지않아 원인을 찾아보았는데요 (3일동안 찾았습니다..) 원인을 보니
void OnSendCompleted(object sender, SocketAsyncEventArgs args)
{
lock (_lock)
{
if (args.BytesTransferred > 0 && args.SocketError == SocketError.Success)
{
try
{
_pendingList.Clear();
_sendArgs.BufferList = null;
// Console.WriteLine($"Send TransferredBytes : {_sendArgs.BytesTransferred}");
OnSend(args.BytesTransferred);
if (_sendQueue.Count > 0)
{
RegisterSend();
}
}
catch (Exception e)
{
Console.WriteLine($"OnSendCompleted Failed : {e}"); // TEMP
}
}
else
{
Console.WriteLine($"{args.SocketError}, {args.BytesTransferred}");
DisConnect();
}
}
}Session클래스의 OnSendCompleted에서 보낸 바이트수가 0, 소켓에러가 InvalidArgument가 나와서 통신이 끊기고 유니티와 연결이 되지 않더라구요. 그런데 전 0바이트를 보낸적이 없는데 왜 0바이트를 보내고 연결이 끊기는 지를 도저히 모르겠습니다.. 질문이 다소 두루뭉실해서 명확한 답변을 받긴 어렵겠지만, 감이 아예 안잡혀서 어디가 문제일지 예측이 너무 힘드네요. 어디가 문제일지 예측하는 방향성이라도 알려주시면 감사 할 것 같습니다 또는 처음부터 다시 하는게 더 빠를까요..
Answer 2
0
0바이트를 보내는 것은 상대방이 연결이 끊길 때 일어나는 행동이라,
Recv 0바이트에 집중하기 보다는 왜 끊겼는지를 봐야 합니다
클라 쪽에서 접속는 잘 되었는지를 확인해봐야 할 것 같네요.
그리고 강의 전체 소스를 실행해도 동일한 문제가 발생하는지 보고
그렇지 않으면 하나씩 복붙 잡업을 해보세요
0
안녕하세요, 인프런 AI 인턴입니다. 강감찬님.
서버와 유니티 간의 통신이 끊기는 문제로 고민 중이시군요. 현재 OnSendCompleted 메서드에서 args.BytesTransferred 값이 0이며 SocketError가 InvalidArgument로 나타나는 상황인데요. 이러한 문제는 여러 원인이 있을 수 있습니다. 몇 가지 가능한 원인과 해결책을 제시해 드리겠습니다.
전송할 데이터의 크기:
Args.BytesTransferred가 0이라면 실제로 전송된 데이터가 없다는 것을 의미합니다. 먼저 확인해야 할 것은_sendQueue에 데이터가 제대로 포함되어 있는지입니다. 데이터가 하드웨어 레벨에서 올바르게 설정되지 않았거나,_sendQueue에서 올바른 엔트리가 빠져나가지 않았을 가능성이 있습니다.소켓 설정 확인:
InvalidArgument에러는 소켓 관련 설정이 잘못되었을 때 발생할 수 있습니다. 특히 소켓이 이미 닫혔다거나 올바르게 연결되지 않은 경우 이런 에러가 생길 수 있습니다. 소켓이 정상적으로 열려 있고, 올바른 포트와 주소로 설정되었는지 확인해보세요.이전 연결 상태: 코드에서는
DisConnect()를 호출하며 연결을 끊고 있지만, 이전에 어떤 상황이 발생하면서 연결 상태가 불안정하게 되었는지도 확인이 필요합니다.args.SocketError나 네트워크 상태에 따라 다양한 원인이 있을 수 있어서, 로그를 통해 에러 전후의 시스템 상태를 더 자세히 추적할 수 있도록 하는 것이 좋습니다.동시성 문제: 멀티 스레드 환경에서는 경쟁 상태가 발생할 수 있습니다.
_lock객체를 이용해 임계영역을 보호하고 있지만, 이 부분에 문제가 없는지 다시 점검해보실 것을 권장드립니다.
비슷한 질문과 답변들 중 참고할만한 링크를 공유드립니다. 이 질문들은 네트워크 관련 특정 문제에 대한 해결 방법을 다루고 있어 도움이 되실 수 있습니다:
제가 제공하는 정보가 문제가 해결되는데 도움이 되길 바랍니다. 문제가 계속 지속될 경우에는 코드 또는 환경설정을 처음부터 다시 살펴보는 것도 좋은 방법일 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
TLS 질문드립니다.
0
34
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
39
2
Unity Span
0
66
2
XML, Dll 차이점
0
99
2
Session 질문입니다
0
74
1
Write Read 커서 키워드
0
69
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
65
2
네트워크 Send 전담 스레드 배치
0
94
2
UnhandledException 으로 서버 터지는 경우
0
82
2
컨텐츠 단, 엔진 단
0
100
1
C# 게임서버 3D MMORPG
0
141
2
유니티6 버전
0
94
2
receive하는 부분과 send하는 부분의 차이
0
128
2
커서의 위치의 중요성
0
99
2
C++ 전혀 모르는데 C# 서버
0
164
2
강의에 질문이 있습니다
0
83
2
멀티스레드 이해도 질문
0
90
1
500 vs 500
0
122
3
OnAcceptHandler 액션 함수
0
57
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
185
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
78
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
100
1
스핀락 질문.
0
104
2
안녕하세요 취업 학원 관련해서 문의드립니다.
0
174
2

