From 6000d5a4e73bbaed99bec72374b1350dcab0ae07 Mon Sep 17 00:00:00 2001 From: syneffort Date: Fri, 3 Feb 2023 18:05:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=81=EB=A0=AC=ED=99=94,=20=EB=B0=94?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EC=88=9C=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Socket/ByteOrder/ByteOrder.csproj | 10 ++++++++++ Socket/ByteOrder/Program.cs | 30 ++++++++++++++++++++++++++++++ Socket/Serialize/Program.cs | 27 +++++++++++++++++++++++++++ Socket/Serialize/Serialize.csproj | 10 ++++++++++ Socket/Socket.sln | 12 ++++++++++++ 5 files changed, 89 insertions(+) create mode 100644 Socket/ByteOrder/ByteOrder.csproj create mode 100644 Socket/ByteOrder/Program.cs create mode 100644 Socket/Serialize/Program.cs create mode 100644 Socket/Serialize/Serialize.csproj diff --git a/Socket/ByteOrder/ByteOrder.csproj b/Socket/ByteOrder/ByteOrder.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/Socket/ByteOrder/ByteOrder.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/Socket/ByteOrder/Program.cs b/Socket/ByteOrder/Program.cs new file mode 100644 index 0000000..060865a --- /dev/null +++ b/Socket/ByteOrder/Program.cs @@ -0,0 +1,30 @@ +using System.Net; + +namespace ByteOrder; + +internal class Program +{ + static void Main(string[] args) + { + /* + * 바이트 오더: 바이트를 메모리에 저장하는 순서 + * 인텔/AMD 계열: 리틀엔디언 - 하위 바이트 먼저 저장 + * ARM 계열: 빅엔디언 - 상위 바이트 먼저 저장 + */ + + byte[] buffer = BitConverter.GetBytes(12345678); + Console.WriteLine(BitConverter.ToString(buffer)); + + // ★★★ 네트워크 레벨에서는 반드시 빅엔디언 쓰기로 약속함 + + // 호스트 바이트 순서에서 네트워크 바이트 순서로 변경 + int num2 = IPAddress.HostToNetworkOrder(12345678); + byte[] buffer2 = BitConverter.GetBytes(num2); + Console.WriteLine(BitConverter.ToString(buffer2)); + + // 네트워크 바이트 순서에서 호스트 바이트 순서로 변경 + int num3 = BitConverter.ToInt32(buffer2); + int num4 = IPAddress.NetworkToHostOrder(num3); + Console.WriteLine(num4); + } +} \ No newline at end of file diff --git a/Socket/Serialize/Program.cs b/Socket/Serialize/Program.cs new file mode 100644 index 0000000..ddf2247 --- /dev/null +++ b/Socket/Serialize/Program.cs @@ -0,0 +1,27 @@ +using System.Text; + +namespace Serialize; + +internal class Program +{ + static void Main(string[] args) + { + //int num = 1234; + //byte[] buffer = BitConverter.GetBytes(num); + //Console.WriteLine($"int byte length: {buffer.Length}"); // 8bit * 4 = 4byte + //int num2 = BitConverter.ToInt32(buffer, 0); + //Console.WriteLine($"deserialized: {num2}"); + + //long num = 1234; + //byte[] buffer = BitConverter.GetBytes(num); + //Console.WriteLine($"long byte length: {buffer.Length}"); // 8bit * 8 = 8byte + //long num2 = BitConverter.ToInt32(buffer, 0); + //Console.WriteLine($"deserialized: {num2}"); + + string str = "Hello world"; + byte[] buffer = Encoding.UTF8.GetBytes(str); + Console.WriteLine($"str byte length: {buffer.Length}"); // 8bit * 8 = 8byte + string str2 = Encoding.UTF8.GetString(buffer); + Console.WriteLine($"deserialized: {str2}"); + } +} \ No newline at end of file diff --git a/Socket/Serialize/Serialize.csproj b/Socket/Serialize/Serialize.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/Socket/Serialize/Serialize.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/Socket/Socket.sln b/Socket/Socket.sln index 658306e..1f0351c 100644 --- a/Socket/Socket.sln +++ b/Socket/Socket.sln @@ -7,6 +7,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\Server.csp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "Client\Client.csproj", "{5EEB261C-98C2-4467-9CC3-2129F0031114}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Serialize", "Serialize\Serialize.csproj", "{E2C0CA13-3138-4CB3-9B41-2C97BA520309}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ByteOrder", "ByteOrder\ByteOrder.csproj", "{34446D97-4EA2-4FEA-8366-B730469A7A87}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +25,14 @@ Global {5EEB261C-98C2-4467-9CC3-2129F0031114}.Debug|Any CPU.Build.0 = Debug|Any CPU {5EEB261C-98C2-4467-9CC3-2129F0031114}.Release|Any CPU.ActiveCfg = Release|Any CPU {5EEB261C-98C2-4467-9CC3-2129F0031114}.Release|Any CPU.Build.0 = Release|Any CPU + {E2C0CA13-3138-4CB3-9B41-2C97BA520309}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2C0CA13-3138-4CB3-9B41-2C97BA520309}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2C0CA13-3138-4CB3-9B41-2C97BA520309}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2C0CA13-3138-4CB3-9B41-2C97BA520309}.Release|Any CPU.Build.0 = Release|Any CPU + {34446D97-4EA2-4FEA-8366-B730469A7A87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34446D97-4EA2-4FEA-8366-B730469A7A87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34446D97-4EA2-4FEA-8366-B730469A7A87}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34446D97-4EA2-4FEA-8366-B730469A7A87}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE