2022년 1월 24일 월요일

헤더와 데이터를 하나의 패킷으로 만드는 코드(Code to make header and data into one packet(C#))

 

헤더와 데이터를 하나의 패킷으로 만드는 코드


BitConverter.GetBytes 메서드는 데이터를 바이트 배열로 변환해주는 역할을 수행합니다.

short자료형으로 되어 있는 헤더를 바이트로 변환하여 byte header[] 배열에 채워 넣습니다.

다음으로 문자열 데이터도 바이트로 변환하여 넣는데, 인코딩 방식은 utf-8을 사용했습니다.

그리고 byte[] packet = new byte[1024] 라는 패킷 버퍼를 만들어서 

"[헤더][데이터]" 의 구조로 패킷을 구성합니다.

Array.Copy메서드는 원본 배열 데이터를 다른 곳으로 복사할 때 사용하는 메서드입니다.



short size = 5;
string data = "Hello";

byte[] header = BitConverter.GetBytes(size);//using System;
byte[] body = Encoding.UTF8.GetBytes(data); // using System.Text;

byte[] packet = new byte[1024];

Array.Copy(header,0,packet,0,header.Length);
Array.Copy(body,0,packet,header.Length,body.Length);


결과

header
[0]5
[1]0

body
[0]72
[1]101
[2]108
[3]108
[4]111

packet
[0]5
[1]0
[2]72
[3]101
[4]108
[5]108
[6]111
[7]
[8]
...
[1023]0


header는 short 자료형이므로 2바이트를 차지하며, 내용은 5라는 정수값입니다

body는 string을 바이트로 변환한 데이터이며 "Hello"에 해당하는 유니코드 문자열 코드값이 들어가 있습니다.

utf-8로 인코딩하였으므로 크기는 5바이트만큼 차지합니다.


packet은 header와body를 합쳐놓은 것이기 때문에 [header][data] 가 차례대로 들어가게됩니다.

뒤에0으로 채워진 데이터는 비어있는 공간입니다.

실제로 원격지에 전송할 때는, 이 빈 공간을 제외한 "헤더+데이터"의 크기만큼만 소켓버퍼로 전송해야 합니다.


git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...