Асинхронный или синхронный клиент TCP в приведенных примерах - C#
Формулировка задачи:
Здравствуйте, подскажите пожалуйста это код синхронного или асинхронного клиента и сервера
Клиент:
Сервер:
Взято от сюда Сетевое программирование
using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; namespace ClientCSharp { class TCP_Client { static void Main(string[] args) { try { Int32 port = 12345;//порт сервера string message = "CALC * 12 6\n";//строка, которую пошлем серверу TcpClient client = new TcpClient("localhost", port); //преобразуем строчку в массив байт Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); // вводим поток stream для чтения и записи через установленное соединение NetworkStream stream = client.GetStream(); // посылаем сообщение серверу stream.Write(data, 0, data.Length); Console.WriteLine("Sent: {0}", message);//печатаем то, что отправили // буффер для приема сообщений data = new Byte[1000]; // строка для приема сообщений сервера String responseData; // получаем сообщение от сервера Int32 bytes = stream.Read(data, 0, data.Length); responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); //печатаем то, что получили Console.WriteLine("Received: {0}", responseData); // закрываем соединение stream.Close(); client.Close(); } catch (ArgumentNullException expt) { Console.WriteLine("ArgumentNullException: {0}", expt); } catch (SocketException expt) { Console.WriteLine("SocketException: {0}", expt); } Console.WriteLine("\n Press Enter to continue..."); Console.Read(); } } }
using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; class TCP_Server { public static void Main() { TcpListener server = null; try { Int32 port = 12345; //порт сервера IPAddress localAddr = IPAddress.Parse("127.0.0.1");//ip-адрес сервера (интерфейс) //TcpListener - класс TCP-сервера из .Net Framework Class Library server = new TcpListener(localAddr, port); // начинаем ожидание подсоединений клиентов на интерфейсе localAddr и порту port server.Start(); // буффер для приема сообщений и соответствующая ему строка для вывода на экран Byte[] bytes = new Byte[1000]; String data; //ответ клиенту String answer_message; //цикл обработки подсоединений клиентов while (true) { Console.Write("Waiting for a connection... "); // Ждем соединения клиента TcpClient client = server.AcceptTcpClient(); //Ура! Кто-то подсоединился! Console.WriteLine("Connected!"); // вводим поток stream для чтения и записи через установленное соединение NetworkStream stream = client.GetStream(); int i = stream.Read(bytes, 0, bytes.Length); if (i > 0) { // преобразуем принятые данные в строку ASCII string. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); //печатаем то, что получили Console.WriteLine("Received: {0}", data); //анализируем запрос клиента и вычисляем результат int res = 72; answer_message = "OK " + res.ToString() + (char)13 + (char)10; //печатаем то, что будем отправлять Console.WriteLine("Sent: {0}", answer_message); //преобразуем строчку-ответ сервера в массив байт byte[] msg = System.Text.Encoding.ASCII.GetBytes(answer_message); // отправляем ответ stream.Write(msg, 0, msg.Length); } // закрываем соединение client.Close(); } } catch (SocketException expt) { Console.WriteLine("SocketException: {0}", expt); } finally { // Stop listening for new clients. server.Stop(); } Console.WriteLine("\nHit enter to continue..."); Console.Read(); } }
Решение задачи: «Асинхронный или синхронный клиент TCP в приведенных примерах»
textual
Листинг программы
using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; // Потоки class TCP_Server { public void TpcServer() // Функция сервера { TcpListener server = null; try { Int32 port = 12345; //порт сервера IPAddress localAddr = IPAddress.Parse("127.0.0.1");//ip-адрес сервера (интерфейс) //TcpListener - класс TCP-сервера из .Net Framework Class Library server = new TcpListener(localAddr, port); // начинаем ожидание подсоединений клиентов на интерфейсе localAddr и порту port server.Start(); // буффер для приема сообщений и соответствующая ему строка для вывода на экран Byte[] bytes = new Byte[1000]; String data; //ответ клиенту String answer_message; //цикл обработки подсоединений клиентов while (true) { Console.Write("Waiting for a connection... "); // Ждем соединения клиента TcpClient client = server.AcceptTcpClient(); //Ура! Кто-то подсоединился! Console.WriteLine("Connected!"); // вводим поток stream для чтения и записи через установленное соединение NetworkStream stream = client.GetStream(); int i = stream.Read(bytes, 0, bytes.Length); if (i > 0) { // преобразуем принятые данные в строку ASCII string. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); //печатаем то, что получили Console.WriteLine("Received: {0}", data); //анализируем запрос клиента и вычисляем результат int res = 72; answer_message = "OK " + res.ToString() + (char)13 + (char)10; //печатаем то, что будем отправлять Console.WriteLine("Sent: {0}", answer_message); //преобразуем строчку-ответ сервера в массив байт byte[] msg = System.Text.Encoding.ASCII.GetBytes(answer_message); // отправляем ответ stream.Write(msg, 0, msg.Length); } // закрываем соединение client.Close(); } } catch (SocketException expt) { Console.WriteLine("SocketException: {0}", expt); } finally { // Stop listening for new clients. server.Stop(); } Console.WriteLine("\nHit enter to continue..."); Console.Read(); } public static void Main() { Thread Server = new Thread(new ThreadStart(TpcServer)); Server.Start(); // Вызываем поток /* Тут можно написать еще код*/ } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д