Простой чат в консоли - проверьте корректность реализации - 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);