From ec5fc514ddfd411aea4434578c4113e0279fe485 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Nov 2023 15:19:25 +0300 Subject: [PATCH 1/3] inint --- 3SemestrKr1/3SemestrKr1.sln | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 3SemestrKr1/3SemestrKr1.sln diff --git a/3SemestrKr1/3SemestrKr1.sln b/3SemestrKr1/3SemestrKr1.sln new file mode 100644 index 0000000..7b10c2f --- /dev/null +++ b/3SemestrKr1/3SemestrKr1.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33403.182 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3SemestrKr1", "3SemestrKr1\3SemestrKr1.csproj", "{AB1D2303-6545-4CCD-87E5-1E5485F7F187}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AB1D2303-6545-4CCD-87E5-1E5485F7F187}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB1D2303-6545-4CCD-87E5-1E5485F7F187}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB1D2303-6545-4CCD-87E5-1E5485F7F187}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB1D2303-6545-4CCD-87E5-1E5485F7F187}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DC079B2E-8D6D-48F5-B092-E5AA61958569} + EndGlobalSection +EndGlobal From 894a6abfb4872b709cec59ec621d2c38418528d7 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Nov 2023 17:02:14 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3SemestrKr1/3SemestrKr1/3SemestrKr1.csproj | 11 ++++ 3SemestrKr1/3SemestrKr1/Program.cs | 32 ++++++++++ 3SemestrKr1/3SemestrKr1/ServerAndClient.cs | 74 ++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 3SemestrKr1/3SemestrKr1/3SemestrKr1.csproj create mode 100644 3SemestrKr1/3SemestrKr1/Program.cs create mode 100644 3SemestrKr1/3SemestrKr1/ServerAndClient.cs diff --git a/3SemestrKr1/3SemestrKr1/3SemestrKr1.csproj b/3SemestrKr1/3SemestrKr1/3SemestrKr1.csproj new file mode 100644 index 0000000..0490e08 --- /dev/null +++ b/3SemestrKr1/3SemestrKr1/3SemestrKr1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + _3SemestrKr1 + enable + enable + + + diff --git a/3SemestrKr1/3SemestrKr1/Program.cs b/3SemestrKr1/3SemestrKr1/Program.cs new file mode 100644 index 0000000..f39b4e5 --- /dev/null +++ b/3SemestrKr1/3SemestrKr1/Program.cs @@ -0,0 +1,32 @@ +using System; +using _3SemestrKr1; + +class Program +{ + public static async Task Main(string[] args) + { + + if (args == null || args.Length > 2 || args.Length == 0) + { + throw new ArgumentException(); + } + + var port = 0; + var correct = int.TryParse(args[0], out port); + if (!correct) + { + throw new ArgumentException(); + } + if (args.Length == 1) + { + var server = new ServerAndClient(8888); + await server.StartServer(); + server.Talk(); + } + else + { + var client = new ServerAndClient(args[1], port); + client.Talk(); + } + } +} \ No newline at end of file diff --git a/3SemestrKr1/3SemestrKr1/ServerAndClient.cs b/3SemestrKr1/3SemestrKr1/ServerAndClient.cs new file mode 100644 index 0000000..775f844 --- /dev/null +++ b/3SemestrKr1/3SemestrKr1/ServerAndClient.cs @@ -0,0 +1,74 @@ +using System.Net; +using System.Net.Sockets; +using System.Net.WebSockets; + +namespace _3SemestrKr1; + +public class ServerAndClient +{ + private static int _port; + private static TcpListener? _listener; + private static TcpClient? _client; + private static string? _ipAddress; + private static Socket? _socket; + private static NetworkStream? stream; + private static object locker = new object(); + + public ServerAndClient(int port) + { + _port = port; + _listener = new TcpListener(IPAddress.Any, port); + } + + public async Task StartServer() + { + if (_listener == null) + { + throw new InvalidProgramException(); + } + _client = await _listener.AcceptTcpClientAsync(); + _socket = _listener.AcceptSocket(); + stream = new NetworkStream(_socket); + } + + public ServerAndClient(string ipAdress, int port) + { + _port = port; + _ipAddress = ipAdress; + _client = new TcpClient(ipAdress, port); + } + + public void Talk() + { + if (_socket == null || stream == null) + { + throw new ArgumentNullException(); + } + + while (true) + { + var writer = new StreamWriter(stream); + var reader = new StreamReader(stream); + var data = reader.ReadToEnd(); + if (string.Compare(data, "exit") == 0) + { + _socket.Shutdown(SocketShutdown.Both); + if (_client != null) + { + _client.Close(); + } + if (_listener!= null) + { + _listener.Server.Close(); + } + break; + } + Console.WriteLine(reader); + var someText = Console.ReadLine(); + lock (locker) + { + writer.WriteLine(someText); + } + } + } +} \ No newline at end of file From a12618a06252e65ecc17f82a9ec1929d3db283d9 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Nov 2023 17:14:29 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3SemestrKr1/3SemestrKr1/ServerAndClient.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/3SemestrKr1/3SemestrKr1/ServerAndClient.cs b/3SemestrKr1/3SemestrKr1/ServerAndClient.cs index 775f844..9597e31 100644 --- a/3SemestrKr1/3SemestrKr1/ServerAndClient.cs +++ b/3SemestrKr1/3SemestrKr1/ServerAndClient.cs @@ -12,7 +12,6 @@ public class ServerAndClient private static string? _ipAddress; private static Socket? _socket; private static NetworkStream? stream; - private static object locker = new object(); public ServerAndClient(int port) { @@ -65,10 +64,7 @@ public void Talk() } Console.WriteLine(reader); var someText = Console.ReadLine(); - lock (locker) - { - writer.WriteLine(someText); - } + writer.WriteLine(someText); } } } \ No newline at end of file