Простой чат в консоли - проверьте корректность реализации - C#
Формулировка задачи:
Здравствуйте, подумал может кому то будет полезно или интересно.
Я создал простенький чат в консоли.
Код сервера
Функции здесь
Клиент
Функции
Как видете клиент и серевер почти идентичны.
Обращиюсь к "знатокам", мне интересны ващи замечания и предложения покоду.
Может кто то имеет предложения по усоверщенствоватию програмы. Просто я студент и мне хочется реализовать интересные задачи.
Кстати этот вариан програмы работаэт локально. Если нужно в сети то на серверной часть там где "127.0.0.1" прописать адрес клиента, а на клиентской - наоборот.
Спасибо за внимание.
using System.Text; using System.Net; using System.IO; using System.Net.Sockets; using System.Threading; namespace server { class Program { static void Main(string[] args) { SF ClientName = new SF(); string clientName = ClientName.GatName(); if (clientName != "error") { Console.WriteLine("Client name - " + clientName); SF Chating = new SF(); TcpListener listener = Chating.TcpList(); Thread resive = new Thread(() => Chating.resivMSG(clientName, listener)); resive.Start(); Chating.writeMSG(listener); } Console.Read(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Net.Sockets; namespace server { class SF { public string GatName() { Console.WriteLine("Whait for connect"); TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000)); listener.Start(); try { // це наш клієнт TcpClient client = listener.AcceptTcpClient(); // Прийом повідомлення StreamReader sr = new StreamReader(client.GetStream()); string clientMSG = sr.ReadLine(); Console.WriteLine("Client test msg : " + clientMSG); // Передача повідомлення StreamWriter sw = new StreamWriter(client.GetStream()); sw.AutoFlush = true; Console.WriteLine("Enter you name"); sw.WriteLine("Enter you name"); // прийом імені string clientName = sr.ReadLine(); Destroy(sr, sw, client, listener); return clientName; } catch (Exception er) { Console.WriteLine(er.ToString()); return "error"; } } public void Destroy(StreamReader sr, StreamWriter sw, TcpClient client, TcpListener listener) { sr.Close(); sw.Close(); client.Close(); listener.Stop(); } public void Destroy(StreamWriter sw, TcpClient client, TcpListener listener) { sw.Close(); client.Close(); listener.Stop(); } public void Destroy(StreamReader sr, TcpClient client, TcpListener listener) { sr.Close(); client.Close(); listener.Stop(); } public void writeMSG(TcpListener listener) { try { // це наш клієнт TcpClient client = listener.AcceptTcpClient(); // Передача повідомлення StreamWriter sw = new StreamWriter(client.GetStream()); sw.AutoFlush = true; Console.WriteLine("spicing"); while (true) { Console.WriteLine("You write"); string servMsg = Console.ReadLine(); Console.WriteLine("--------------------"); if (servMsg == "TheEnd") break; sw.WriteLine(servMsg); } Destroy(sw, client, listener); } catch (Exception er) { Console.WriteLine(er.ToString()); } } public void resivMSG(string clientName, TcpListener listener) { try { // це наш клієнт TcpClient client = listener.AcceptTcpClient(); // Прийом повідомлення StreamReader sr = new StreamReader(client.GetStream()); // Передача повідомлення while (true) { string clientMSG = sr.ReadLine(); if (clientName == "TheEnd") break; Console.WriteLine("===================="); Console.WriteLine(clientName + " write : " + clientMSG); Console.WriteLine("===================="); } Destroy(sr, client, listener); } catch (Exception er) { Console.WriteLine(er.ToString()); } } public TcpListener TcpList() { TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000)); listener.Start(); return listener; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace client { class Program { static void Main(string[] args) { CF ClientName = new CF(); if (ClientName.SendName() == 1) { Console.WriteLine("Go spicking!"); CF Chating = new CF(); Thread resive = new Thread(Chating.resivMSG); resive.Start(); Chating.writePSG(); Console.Read(); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace client { class CF { public int SendName() { try { TcpClient client = new TcpClient(); client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000)); // відправка повідомлення StreamWriter sw = new StreamWriter(client.GetStream()); sw.AutoFlush = true; Console.WriteLine("write test mesage"); string clientMsg = Console.ReadLine(); sw.WriteLine(clientMsg); // прийом повідомлення StreamReader sr = new StreamReader(client.GetStream()); string serverMSG = sr.ReadLine(); Console.WriteLine(" From Server : " + serverMSG); // відправка імені string myName = Console.ReadLine(); sw.WriteLine(myName); Destroy(sr, sw, client); return 1; } catch (Exception er) { Console.WriteLine(er.ToString()); return 0; } } public void Destroy(StreamReader sr, StreamWriter sw, TcpClient client) { sr.Close(); sw.Close(); client.Close(); } public void Destroy(StreamWriter sw, TcpClient client/*, TcpListener listener*/) { sw.Close(); client.Close(); } public void Destroy(StreamReader sr, TcpClient client/*, TcpListener listener*/) { sr.Close(); client.Close(); } public void writePSG() { try { TcpClient client = new TcpClient(); client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000)); // відправка повідомлення StreamWriter sw = new StreamWriter(client.GetStream()); sw.AutoFlush = true; while (true) { Console.WriteLine("You mesage"); string clientMSG = Console.ReadLine(); Console.WriteLine("--------------------"); if (clientMSG == "TheEnd") break; sw.WriteLine(clientMSG); } Destroy(sw, client); } catch (Exception er) { Console.WriteLine(er.ToString()); } } public void resivMSG() { try { TcpClient client = new TcpClient(); client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000)); // прийом повідомлення StreamReader sr = new StreamReader(client.GetStream()); while (true) { string serverMSG = sr.ReadLine(); if (serverMSG == "TheEnd") break; Console.WriteLine("===================="); Console.WriteLine("Server mesage: " + serverMSG); Console.WriteLine("===================="); } Destroy(sr, client); } catch (Exception er) { Console.WriteLine(er.ToString()); } } } }
Решение задачи: «Простой чат в консоли - проверьте корректность реализации»
textual
Листинг программы
ChatUser chatUser = new ChatUser(); ChatService chatService = new ChatService(); chatService.SendMessage(chatUser.Say()); chatUser.Read(chatService.ReceiveMessage()); chatService.SendMessage(chatUser.UserName);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д