소개
게시글
질문&답변
2023.03.11
Name이 한번 오면 초기화되는 이유
답변 감사합니다. 사실 바로 질문드리는건 아니고 보통 몇시간동안 삽질하다가 질문드리는것이었는데 부족했었던 것 같습니다. 더 열심히하겠습니다!!(사진)그리고 해당 원인을 찾은것같습니다. read에서는 offset을 ReadOnlySpan s = new ReadOnlySpan(segment.Array,segment.Offset,segment.Count); 이렇게 offset을 반영하여 segment로 끌어왔는데 정작 write에서는 ArrayCopy할 때에 Offset을 더해주지않고 count만 넘겨주어 계속 첫 22바이트영역의 name부분에만 넣고 있었던겁니다. (강의에서도 offset을 더하지 않은채로 진행했지만, 강사님께서는 5번 보내지않고 한번만 보내어 잘 동작된것처럼 보였던 것 같습니다.)제일 이해안되었던게 다른건 다 잘나오는데 name만 이상하게 나오는 이유였는데, 해당 name을 copy해주는 array.copy에서 저렇게 해주어 첫 ABCD만 나오고 그 이후엔 애초에 name byte가 들어있지않으니 나오지 않았던것입니다. 실제로 이런 실수 문제를 줄이기 위해서는 다른 리팩토링 과정이 필요할 것 같은데 어떻게할지는 전혀 지식이 없어서 필요하겠구나..만 생각이 드네요. 저는 다른 일을하고있어서 해당 강의를 병행할 시간이 별로 없어서그런지 빨리 해당 기술을 배워 일에 적용시켜야하는 급한 마음에 몇시간동안 계속 삽질해보다 질문을 드렸었는데, 강사님의"어차피 현업에 가더라도 지금과 마찬가지로 알 수 없는 문제들이 막 터지는데그 때는 누군가 옆에서 도와주고 답을 알려주는 사람이 있지 않습니다."가 굉장히 마음에 와 닿았습니다. 마음에 새기며 더 열심히 해보겠습니다. 좋은강의, 답변 감사드립니다!
- 2
- 4
- 442
질문&답변
2023.03.11
Name이 한번 오면 초기화되는 이유
저도 디버깅을 하고싶지만, 디버깅을 하면 client또는 server둘중 하나만 디버깅이 가능해서 값을 주고받는것에 대한 테스트가 안됩니다. 그래서 강사님은 어떻게 두 프로그램을 동시에 디버깅하시는지에 대해 질문을 올린적이 있습니다..ㅜ 그래서 현재 자세하게 디버깅을 할 수가없어 console writeline으로 확인해보며 값을 체크를 하였지만 찾지 못하여 질문드렸습니다. write()메서드를 이후의 방법으로 바꿔보았을 때 잘 되는것으로 보아, write()의 string serializable부분코드가 잘못된 것 같아보여서 해당 코드 첨부드립니다.. public override ArraySegment Write() { //이만큼의 버퍼를 일단 가져옴 ArraySegment segment = SendBufferHelper.Open(4096); ushort count = 0; bool success = true; //처음에만 span으로 찝어주고 이후에 slice Span s = new Span(segment.Array, segment.Offset, segment.Count); count += sizeof(ushort); success &= BitConverter.TryWriteBytes(s.Slice(count,s.Length-count), this.packetId); count += sizeof(ushort); success &= BitConverter.TryWriteBytes(s.Slice(count,s.Length-count), this.playerId); count += sizeof(long); //string serialize ushort nameLen = (ushort)Encoding.Unicode.GetByteCount(this.name); success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), nameLen); count += sizeof(ushort); // TryWriteBytes()에서 string, byte[]을 인자로 받는 메서드가 없어서 이렇게 구현 Array.Copy(Encoding.Unicode.GetBytes(this.name), 0, segment.Array, count, nameLen); count += nameLen; success &= BitConverter.TryWriteBytes(s, count); if (success == false) { return null; } //실제로 사용한 데이터 범위 가져옴 return SendBufferHelper.Close(count); }
- 2
- 4
- 442
질문&답변
2023.03.07
RegisterRecv()에서 args초기화 구문 사라진 이유
아.. AcceptSocket은 listener에서만 사용되고 listener에서 session을 start시켜주니까 session.Start(args.AcceptSocket);여기서 소켓 넘겨주고 session은 해당 소켓을 받으면 되는것이니 AcceptSocket은 안쓰이는군요. 감사합니다.!!
- 0
- 3
- 372
질문&답변
2023.03.07
segmeng 범위 지정시에 질문
감사합니다. 근데 지금 현재까지(SendBuffer 강의)는 offset이 전부 0인경우로 라고 생각이드는데, 나중에 offset이 달라지는 경우가 나오는것인가요?
- 0
- 3
- 434
질문&답변
2023.03.05
segmeng 범위 지정시에 질문
저는 그 offset의 역할을 _readPos가 이미 해주고있다고 느껴지는데, 어떻게 구분해야 이해를 할 수 있는것인가요?
- 0
- 3
- 434