Packet Generator#2 string부분
331
작성한 질문수 3
안녕하세요
이 부분까지는 실행이 잘되는 것을 확인하였습니다.
그 뒤에 PacketFormat 부분에서실행시키면 아래와 같이 string부분은 입력이 안됩니다.
제 코드에서 틀린부분을 못찾겠어서 선생님이 올려주신 정답 코드로 다시 실행을 해보았는데
똑같이 string부분이 입력이 안되는데 혹시 어떤 부분이 잘못되었는지 알려주실 수 있으실까요?
class PlayerInfoReq
{
public long playerId;
public void Read(ArraySegment<byte> openSegment)
{
ushort count = 0;
ReadOnlySpan<byte> s = new ReadOnlySpan<byte>(openSegment.Array, openSegment.Offset, openSegment.Count);
count += sizeof(ushort);
count += sizeof(ushort);
this. playerId = BitConverter.ToInt64(s.Slice(count, s.Length - count));
count += sizeof(long);
}
public ArraySegment<byte> Write()
{
ArraySegment<byte> segement = SendBufferHandler.Open(4096);
bool success = true;
ushort count = 0;
Span<byte> s = new Span<byte>(segement.Array, segement.Offset, segement.Count);
count += sizeof(ushort);
success &= BitConverter.TryWriteBytes(s.Slice(count,s.Length-count), (ushort)PacketID.PlayerInfoReq);
count += sizeof(ushort);
success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), this. playerId);
count += sizeof(long);
success &= BitConverter.TryWriteBytes(s, count);
if (success == false)
return null;
return SendBufferHandler.Close(count);
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴이에요. 해당 코드를 보면 PlayerInfoReq 클래스의 Write 메서드에서 string 값을 입력하는 부분이 누락되어 있는 것 같습니다.
string 값을 입력하는 부분이 없으므로 string 변수를 사용하지 않는 것 같아보입니다. 만약 string 값을 입력하려면 해당 변수를 선언하고 값을 할당하도록 코드를 수정해야 합니다.
예를 들어, PlayerInfoReq 클래스에 다음과 같이 string 변수를 추가하고 값을 입력하는 코드를 작성할 수 있습니다.
public class PlayerInfoReq
{
public long playerId;
public string playerName; // string 변수 추가
public void Read(ArraySegment<byte> openSegment)
{
// 이하 코드 생략
}
public ArraySegment<byte> Write()
{
ArraySegment<byte> segment = SendBufferHandler.Open(4096);
bool success = true;
ushort count = 0;
Span<byte> s = new Span<byte>(segment.Array, segment.Offset, segment.Count);
count += sizeof(ushort);
success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), (ushort)PacketID.PlayerInfoReq);
count += sizeof(ushort);
// string 값을 입력하는 코드 작성
success &= Encoding.UTF8.GetBytes(playerName, s.Slice(count, s.Length - count), out int playerNameLength);
count += (ushort)playerNameLength;
return new ArraySegment<byte>(segment.Array, segment.Offset, count);
}
}
위의 코드에서 playerName 변수를 추가하고, Write 메서드에서 해당 변수의 값을 Byte로 변환하여 segement에 기록하는 코드를 추가했습니다. 이렇게 수정하면 string 값을 성공적으로 입력할 수 있을 것입니다.
해당 부분을 확인하시고 필요한 코드를 추가해보세요. 추가적인 문제가 있으면 언제든지 물어보세요. 이용해주셔서 감사합니다.
TLS 질문드립니다.
0
52
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
55
2
Unity Span
0
81
2
XML, Dll 차이점
0
110
2
Session 질문입니다
0
81
1
Write Read 커서 키워드
0
78
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
73
2
네트워크 Send 전담 스레드 배치
0
100
2
UnhandledException 으로 서버 터지는 경우
0
88
2
컨텐츠 단, 엔진 단
0
106
1
질문 있습니다
0
78
2
C# 게임서버 3D MMORPG
0
151
2
유니티6 버전
0
100
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
105
2
C++ 전혀 모르는데 C# 서버
0
170
2
강의에 질문이 있습니다
0
88
2
멀티스레드 이해도 질문
0
96
1
500 vs 500
0
131
3
OnAcceptHandler 액션 함수
0
64
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
193
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
83
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
107
1
스핀락 질문.
0
111
2





