-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
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;
}
}
}
답변을 작성해보세요.
0
Rookiss
지식공유자2022.03.31
위 내용만으로는 저도 알기 힘듭니다.
Transfered bytes Recv 로그를 찍는 곳에 breakpoint를 걸고
디버깅을 해보시기 바랍니다.
또 제가 책을 보다가 결과가 다르게 나오면 쓰는 방법인데,
강의 소스코드를 다운로드 받은 후 파일 단위로 복붙해서
범인 색출을 해보시기 바랍니다.
답변 1