inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

SendBuffer

Knight를 Send할 때 8 바이트가 아닌 버퍼의 전체 크기인 409600바이트 만큼합니다.

367

jmj51755245

작성한 질문수 4

0

ArraySegment<byte> openSegment = SendBufferHelper.Open(4096);

            byte[] buffer = BitConverter.GetBytes(knight.hp);
            Console.WriteLine(buffer.Length);
            byte[] buffer2 = BitConverter.GetBytes(knight.attack);
            Console.WriteLine(buffer2.Length);
            Array.Copy(buffer, 0, openSegment.Array, openSegment.Offset, buffer.Length);
            Array.Copy(buffer2, 0, openSegment.Array, openSegment.Offset + buffer.Length, buffer2.Length);
            ArraySegment<byte> sendBuff = SendBufferHelper.Close(buffer.Length + buffer2.Length); 

            Send(sendBuff);

이 코드를 이용해 Send를 할 때 강의를 보며 8바이트만 보내게 되지만

 

서버

Listening...

OnConnected : [fe80::2196:d828:3293:b5c5%4]:50464

4

4

[From Client] Hello World! 0

[From Client] Hello World! 1Hello World! 2Hello World! 3Hello World! 4

Transferred bytes : 409600

OnDisconnected : [fe80::2196:d828:3293:b5c5%4]:50464

 

 

더미 클라이언트

OnConnected : [fe80::2196:d828:3293:b5c5%4]:7777

Transferred bytes : 14

Transferred bytes : 14

Transferred bytes : 14

Transferred bytes : 14

Transferred bytes : 14

[From Server] d

 

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

[From Server]

OnDisconnected : [fe80::2196:d828:3293:b5c5%4]:7777

 

이런 식으로 8바이트만보내는게아닌 buffer를 모두 보내버리는데 문제점을 못찾겠습니다.

 

 

Sendbuffer 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ServerCore
{

    public class SendBufferHelper
    {
        public static ThreadLocal<SendBuffer> CurretBuffer = new ThreadLocal<SendBuffer>(()=> { return null; });


        public static int ChunkSize { get; set; } = 4096 * 100;

        public static ArraySegment<byte> Open(int reserverSize)
        {
            if (CurretBuffer.Value == null)
                CurretBuffer.Value = new SendBuffer(ChunkSize);

            if (CurretBuffer.Value.FreeSize < reserverSize)
                CurretBuffer.Value = new SendBuffer(ChunkSize);

            return CurretBuffer.Value.Open(reserverSize);

        }
        public static ArraySegment<byte> Close(int usedSize)
        {
            return CurretBuffer.Value.Close(usedSize);
        }
    }

    public class SendBuffer
    {
        byte[] _buffer;
        int _usedSize = 0; // 사용한 버퍼

        public int FreeSize { get { return _buffer.Length - _usedSize; } }


        public SendBuffer(int chunckSize)
        {
            _buffer = new byte[chunckSize];
        }


      
        public ArraySegment<byte> Open(int reserveSize) 
        {
            if (reserveSize > FreeSize)
                return null;

            return new ArraySegment<byte>(_buffer, _usedSize, reserveSize); 
        }

        /
        public ArraySegment<byte> Close(int usedSize)
        {
            ArraySegment<byte> segment = new ArraySegment<byte>(_buffer, _usedSize, usedSize); 
            _usedSize += usedSize;
            return segment; 
        }
    }
}

 

 

 

unity network C#

답변 1

0

Rookiss

위 내용만으로는 저도 알기 힘듭니다.
Transfered bytes Recv 로그를 찍는 곳에 breakpoint를 걸고
디버깅을 해보시기 바랍니다.

또 제가 책을 보다가 결과가 다르게 나오면 쓰는 방법인데,
강의 소스코드를 다운로드 받은 후 파일 단위로 복붙해서
범인 색출을 해보시기 바랍니다.

0

jmj51755245

답변 감사합니다!

C#에서의 RAII

0

72

3

TLS 질문드립니다.

0

82

2

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

0

77

2

Unity Span

0

101

2

XML, Dll 차이점

0

134

2

Session 질문입니다

0

98

1

Write Read 커서 키워드

0

88

1

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

0

86

2

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

0

115

2

UnhandledException 으로 서버 터지는 경우

0

104

2

컨텐츠 단, 엔진 단

0

118

1

질문 있습니다

0

94

2

C# 게임서버 3D MMORPG

0

159

2

유니티6 버전

0

108

2

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

0

154

2

커서의 위치의 중요성

0

111

2

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

0

179

2

강의에 질문이 있습니다

0

94

2

멀티스레드 이해도 질문

0

108

1

500 vs 500

0

151

3

OnAcceptHandler 액션 함수

0

71

1

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

0

207

2

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

0

87

2

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

0

116

1