인프런 커뮤니티 질문&답변
질문 있습니다
작성
·
20
·
수정됨
0
강의와 똑같은 코드로 실습을 하고있는데요, 서버와 유니티의 통신이 되지않아 원인을 찾아보았는데요 (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바이트를 보내고 연결이 끊기는 지를 도저히 모르겠습니다.. 질문이 다소 두루뭉실해서 명확한 답변을 받긴 어렵겠지만, 감이 아예 안잡혀서 어디가 문제일지 예측이 너무 힘드네요. 어디가 문제일지 예측하는 방향성이라도 알려주시면 감사 할 것 같습니다 또는 처음부터 다시 하는게 더 빠를까요..
답변 2
0
0바이트를 보내는 것은 상대방이 연결이 끊길 때 일어나는 행동이라,
Recv 0바이트에 집중하기 보다는 왜 끊겼는지를 봐야 합니다
클라 쪽에서 접속는 잘 되었는지를 확인해봐야 할 것 같네요.
그리고 강의 전체 소스를 실행해도 동일한 문제가 발생하는지 보고
그렇지 않으면 하나씩 복붙 잡업을 해보세요
0
안녕하세요, 인프런 AI 인턴입니다. 강감찬님.
서버와 유니티 간의 통신이 끊기는 문제로 고민 중이시군요. 현재 OnSendCompleted 메서드에서 args.BytesTransferred 값이 0이며 SocketError가 InvalidArgument로 나타나는 상황인데요. 이러한 문제는 여러 원인이 있을 수 있습니다. 몇 가지 가능한 원인과 해결책을 제시해 드리겠습니다.
전송할 데이터의 크기:
Args.BytesTransferred가 0이라면 실제로 전송된 데이터가 없다는 것을 의미합니다. 먼저 확인해야 할 것은_sendQueue에 데이터가 제대로 포함되어 있는지입니다. 데이터가 하드웨어 레벨에서 올바르게 설정되지 않았거나,_sendQueue에서 올바른 엔트리가 빠져나가지 않았을 가능성이 있습니다.소켓 설정 확인:
InvalidArgument에러는 소켓 관련 설정이 잘못되었을 때 발생할 수 있습니다. 특히 소켓이 이미 닫혔다거나 올바르게 연결되지 않은 경우 이런 에러가 생길 수 있습니다. 소켓이 정상적으로 열려 있고, 올바른 포트와 주소로 설정되었는지 확인해보세요.이전 연결 상태: 코드에서는
DisConnect()를 호출하며 연결을 끊고 있지만, 이전에 어떤 상황이 발생하면서 연결 상태가 불안정하게 되었는지도 확인이 필요합니다.args.SocketError나 네트워크 상태에 따라 다양한 원인이 있을 수 있어서, 로그를 통해 에러 전후의 시스템 상태를 더 자세히 추적할 수 있도록 하는 것이 좋습니다.동시성 문제: 멀티 스레드 환경에서는 경쟁 상태가 발생할 수 있습니다.
_lock객체를 이용해 임계영역을 보호하고 있지만, 이 부분에 문제가 없는지 다시 점검해보실 것을 권장드립니다.
비슷한 질문과 답변들 중 참고할만한 링크를 공유드립니다. 이 질문들은 네트워크 관련 특정 문제에 대한 해결 방법을 다루고 있어 도움이 되실 수 있습니다:
제가 제공하는 정보가 문제가 해결되는데 도움이 되길 바랍니다. 문제가 계속 지속될 경우에는 코드 또는 환경설정을 처음부터 다시 살펴보는 것도 좋은 방법일 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





