• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

22.03.31 16:02 작성 조회수 228

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; 
        }
    }
}

 

 

 

답변 1

답변을 작성해보세요.

0

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

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

답변 감사합니다!