Простой чат в консоли - проверьте корректность реализации - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, подумал может кому то будет полезно или интересно. Я создал простенький чат в консоли. Код сервера
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());
            }
        }
}
}
Как видете клиент и серевер почти идентичны. Обращиюсь к "знатокам", мне интересны ващи замечания и предложения покоду. Может кто то имеет предложения по усоверщенствоватию програмы. Просто я студент и мне хочется реализовать интересные задачи. Кстати этот вариан програмы работаэт локально. Если нужно в сети то на серверной часть там где "127.0.0.1" прописать адрес клиента, а на клиентской - наоборот. Спасибо за внимание.

Решение задачи: «Простой чат в консоли - проверьте корректность реализации»

textual
Листинг программы
ChatUser chatUser = new ChatUser();
            ChatService chatService = new ChatService();
 
            chatService.SendMessage(chatUser.Say());
            chatUser.Read(chatService.ReceiveMessage());
 
            chatService.SendMessage(chatUser.UserName);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы