inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 4: Game Server

SendBuffer

에러가 발생합니다..

4719

leomessi

50 asked

0

dummyClient측에서 sendAsync를 하려고 할 때.. 에러가 발생합니다.

에러 내용

Unhandled exception. System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Net.Sockets.Socket'.
   at System.Net.Sockets.Socket.SendAsync(SocketAsyncEventArgs e, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.SendAsync(SocketAsyncEventArgs e)
   at ServerCore.Session.RegisterSend() in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/ServerCore/Session.cs:line 71
   at ServerCore.Session.Send(ArraySegment`1 sendBuff) in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/ServerCore/Session.cs:line 57
   at DummyClient.GameSession.OnConnected(EndPoint endPoint) in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/DummyClient/Program.cs:line 20
   at ServerCore.Connector.OnConnectCompleted(Object sender, SocketAsyncEventArgs args) in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/ServerCore/Connector.cs:line 42

그리고 찍히는 로그가.. 좀 이상한 것 같은데요..

[From Server]: 메시지

OnDisconnected: [fe80::1%1]:7777

OnConnected: [fe80::1%1]:7777

이러고 나서 바로 위 에러가 나버립니다.

도저히 원인을 찾을 수 없을 것 같아서 질문 남겨드립니다..

C# unity network

Answer 2

1

Rookiss

강의 코드가 100% 완벽하진 않아서 
중간 중간 try-catch가 누락된 부분이 있을 수 있습니다.
크래시 나는 쪽 코드에 try -catch 추가해주시기 바랍니다.
에러 메시지는 이미 연결이 끊긴 Socket을 대상으로 read/write/close 등을 할 때 일어나는 상황으로 보입니다.

System.ObjectDisposedException: Cannot access a disposed object.
관련하여 아래 문서 참고 바랍니다.
https://docs.microsoft.com/ko-kr/dotnet/api/system.objectdisposedexception?view=net-5.0

해결이 되지 않으면 rookiss@naver.com로
전체 프로젝트 압축후 보내주시기 바랍니다.

0

leomessi

제가 중간에 실수를 해서 OnReceiveCompleted 함수 내용 중에서 틀린 점이 있었는데요,

int processLength = OnReceive(_recvBuffer.ReadSegment);

로 작성해야 했던 것을

int processLength = OnReceive(new ArraySegment<byte>(_recvBuffer.ReadSegment.Array));

라고 잘못 작성했습니다.

OnReceive 함수에 ReadSegment 대신 버퍼를 통째로 넘기는 바람에, DataSize보다 processLength가 더 커지게 되었고, 그 결과 Disconnect가 호출된 이후에 Send가  처리되어서 위와 같은 오류가 발생하게 된 것 같습니다.

Disconnect를 하기 전에 로그를 찍어줬다면 실수를 줄일 수 있었을텐데.. 덕분에 잘 배웠습니다.

늦은 시간에 답변주셔서 감사합니다.

0

MUNODevelop

연결하고 바로 연결을 끊는 경우 발생합니다. 아래 python 코드로 테스트 해보시면 됩니다.

import socket


def check_tcp_connection(ip, port):
    try:
        # Create a new socket using the given IP and port
        with socket.create_connection((ip, port), timeout=5) as s:
            print(f"Successfully connected to {ip} on port {port}")
    except socket.error as e:
        print(f"Failed to connect to {ip} on port {port}. Error: {e}")


if __name__ == "__main__":
    target_ip = "your ip"
    target_port = int("7777")

    check_tcp_connection(target_ip, target_port)

TLS 질문드립니다.

0

35

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

질문 있습니다

0

73

2

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