VisualStudio 93

[C#서버] 구글 프로토 버퍼(Google Protobuf C#)

구글 프로토버퍼란? Google Protocol Buffers(protobuf)는 데이터 직렬화 형식으로 사용되는 강력하고 효율적인 도구로, 다양한 언어와 플랫폼 간에 데이터를 교환하고 저장하기 위해 사용됩니다. protobuf의 주요 장점은 다음과 같습니다: 효율적인 직렬화: protobuf는 바이트 크기 측면에서 효율적입니다. 작은 크기의 직렬화된 데이터를 생성하며, 이는 데이터를 네트워크로 전송하거나 디스크에 저장할 때 대역폭과 저장 공간을 절약합니다. 빠른 역직렬화: protobuf 메시지는 효율적인 이진 형식으로 저장되므로 역직렬화 속도가 빠릅니다. 데이터를 직렬화된 형식에서 메모리 객체로 변환하는 작업이 빠르게 수행됩니다. 이식성: protobuf는 언어 중립적인 형식으로 데이터를 정의하며, ..

[C#] Web 종류 net6.0기준

builder.Services.AddRazorPages(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); MVC Model, view, Contoller 방식 고전적이지만 명확함 builder.Services.AddControllersWithViews(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); Razor MVVM 방식 Controller와 View가 합처져 있다. builder.Services.AddRazorPages(); app.MapRazorPages(); WebAPI View가 없는 방식 범용적으로 사용 할 수 있다. bu..

VisualStudio/C# 2022.11.07

[C#서버][방법] 배치(bat)파일 사용 방법 Main(string[] args) args 인자 값 만들기

bat파일 만드는 방법 새로 만들기 -> 메모장 생성 -> 확장자명 .bat로 변경 1. START명령어를 사용하여 exe 실행 자동화 2. exe뒤에 ../../.......은 Main(string[] args) args의 인자값을 생성하는 부분 3. XCOPY /Y GenPackets.cs "../../DummyClient/Packet" XCOPY - 파일을 복사하여 다른 폴더에 저장하기 위해사용 /Y - 이미 파일이 존재한다면 덮어쓰기 protoc.exe -I=./ --csharp_out=./ ./Protocol.proto IF ERRORLEVEL 1 PAUSE START ../../../Server/PacketGenerator/bin/PacketGenerator.exe ./Protocol.prot..

VisualStudio/C# 2022.11.01

[C#서버] 빌드 경로 AppendTargetFrameworkToOutputPath

AppendTargetFrameworkToOutputPath AppendTargetFrameworkToOutputPath 속성은 TFM(대상 프레임워크 모니커)을 출력 경로(OutputPath에 정의)에 추가할지 여부를 제어합니다. .NET SDK는 대상 프레임워크와 런타임 식별자(있는 경우)를 출력 경로에 자동으로 추가합니다. AppendTargetFrameworkToOutputPath를 false로 설정하면 TFM이 출력 경로에 추가되지 않습니다. 그러나 출력 경로에 TFM이 없으면 여러 빌드 아티팩트가 서로 덮어쓸 수 있습니다. 예를 들어 .NET 5 앱에서 다음과 같이 설정하면 출력 경로가 bin\Debug\net5.0에서 bin\Debug로 변경됩니다. XML복사 false 출처 - https:..

[C#서비][방법] Packet자동화 xml파일 읽는 법

static void Main(string[] args) { XmlReaderSettings settings = new XmlReaderSettings() { IgnoreComments = true,//주석무시 IgnoreWhitespace = true//스페이스바 무시 }; using (XmlReader r = XmlReader.Create("PDL.xml", settings)) { r.MoveToContent();//xml에 존재하는 헤더를 건너 뛴다. while (r.Read()) { if (r.Depth == 1 && r.NodeType == XmlNodeType.Element)//XmlNodeType.Element은 xml의 처음 시작 변수의미 마지막 닫을 때는 필요 없기 때문. Console...

[C#서버][방법] BitConverter 사용법 - ArraySegment<byte>, Span, Slice

BitConverter BitConverter란 기본 데이터 형식을 바이트의 배열로, 바이트의 배열을 기본 데이터 형식으로 변환해주는 클래스이다. 배열에 데이터를 읽어온 후 배열에 담긴 데이터를 어떻게 기본 자료형으로 변환하는데 유용하다. Bitconverter.GetBytes(문자열) - 문자열 -> 배열 Bitconverter.ToUInt16(읽을배열, 읽을위치) - 배열특정위치 -> 문자열 (ushort일때 2바이트 추출) BitConverter.ToUInt16( new ReadOnlySpan()) - new ReadOnlySpan사용 하기 읽기전용, 안전성확보 excption public class Packet { public ushort size; public ushort packetId; } ..

[C#서버] TCP VS UDP

TCP 연결형 서비스(택배)1) 연결을 위해 할당되는 논리적인 경로가 존재한다.2) 전송 순서가 보장된다.3) 데이터 경계가 없어 packet을 한 번에 온전하게 받을 수 없을 때가 존재한다.속도와 신뢰성1) 패킷 유실이 일어나면 책임지고 다시 전송한다. 2) 물건을 주고 받을 상황이 아니면 일부만 보낸다.(흐름/혼잡제어)3) 고려할 것이 많으니 속도가 좋지 않다.UDP 비연결형 서비스(이메일, 비디오플레이)1) 연결이라는 개념이 없다.2) 전송 순서 보장되지 않는다.3) 데이터 경계가 존재하여 한 번 보낸 패킷을 온전하게 받을 수 있다.속도와 신뢰성1) 분실에 대한 책임을 지지 않는다.2) 일단 보내고 생각한다.3) 단순하기 때문에 속도가 빠르다.

[C#서버] 블로킹(Accept)와 논블로킹(AcceptAsync)

아래와 같이 Socket문법에서 Accept()는 블로킹 함수이다. 블로킹 함수란 무한정 대기한다는 뜻이다. 무수한 유저를 받기위해서는 블로킹 함수를 채택하는 것 은 바람직 하지 않을 수 있다. 결국 논블로킹 방법을 사용해야한다. 동기방식인 블로킹 문법 Accept() Socket _listenSocket; _listener.Accept() 비동기방식인 논블로킹 문법 AcceptAsync() internal class Listener { Socket _listenSocket; Action _onAcceptHandler; public void Init(IPEndPoint endPoint, Action onAcceptHandler) { //문지기 _listenSocket = new Socket(endPoin..

[C#서버][소스] 기본 서버, 클라이언트 소스

서버 static void Main(string[] arg) { //DNS (Domain Name System) -> www.xxxxx.com string host = Dns.GetHostName();//host는 goole.com 도메인주소 IPHostEntry ipHost = Dns.GetHostEntry(host);//도메인 주소를 통해 ip획득위해 IPAddress ipAddr = ipHost.AddressList[0];//0번은 ip6, 1번은 ip4 IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777); //문지기 Socket listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, Prot..