« Предыдущая Следующая »

2.2. Код программного продукта

2.2.1. База данных для MySQL сервера.

-- MySQL dump 10.13  Distrib 8.0.16, for Win64 (x86_64)
--
-- Host: 127.0.0.1    Database: work
-- ------------------------------------------------------
-- Server version       8.0.16

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
SET NAMES utf8 ;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `account`
--

DROP TABLE IF EXISTS `account`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
SET character_set_client = utf8mb4 ;
CREATE TABLE `account` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`pass` varchar(50) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `account`
--
LOCK TABLES `account` WRITE;
/*!40000 ALTER TABLE `account` DISABLE KEYS */;

INSERT INTO `account` VALUES (1,'Несмелов Петр','йфя123'),(2,'Синицин Владимир','цыч123'),(3,'Игнатьев Кирил','увс321'),(4,'Михайлов Антон','епи123'),(5,'Терехова Надежда','15342'),(22,'Штельмах Анастасия','qazwsx');
/*!40000 ALTER TABLE `account` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-05-17  19:20:50

2.2.2.Программный код на С# в VisualStudia.

//-------------------------------------------------------//
ChatController.cs
//-------------------------------------------------------//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace serverChat
{
public static class ChatController
{
private const int _maxMessage = 100;
public static List<message> Chat = new List<message>();
public struct message
{
public string userName;
public string data;
public message(string name, string msg)
{
userName = name;
data = msg;
}
}
public static void AddMessage(string userName, string msg)
{
try
{
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(msg)) return;
int countMessages = Chat.Count;
if (countMessages > _maxMessage) ClearChat();
message newMessage = new message(userName, msg);
Chat.Add(newMessage);
Console.WriteLine("{0}: {1}", userName, msg);
Server.UpdateAllChats();
}
catch (Exception exp) { Console.WriteLine("Ошибка с доставкой: {0}.", exp.Message); }
}
public static void AddLsMessage(string userName, string msg, string au)
{
try
{
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(msg) || string.IsNullOrEmpty(au)) return;
int countMessages = Chat.Count;
if (countMessages > _maxMessage) ClearChat();
message newMessage = new message(userName, msg);
Console.WriteLine("{0}->{2}: {1}", userName, msg, au);
Server.UpdateAllChatsLS(userName, msg, au);
}
catch (Exception exp) { Console.WriteLine("Ошибка с доставкой: {0}.", exp.Message); }
}
public static void ClearChat()
{
Chat.Clear();
}
public static string GetChat()
{
try
{
string data = "#updatechat&";
data += String.Format("{0}~{1}", Chat[Chat.Count - 1].userName, Chat[Chat.Count - 1].data);
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка с отправкой: {0}", exp.Message); return string.Empty; }
}
public static string GetChatLS(string userName, string msg, string au)
{
try
{
string data = "#lss&";
data += String.Format("{0}~{1}|{2}", msg, userName, au);
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка с отправкой: {0}", exp.Message); return string.Empty; }
}
public static string GetSysMessage(string g)
{
try
{
string data = "#sys&";
data += String.Format(g);
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка с обновлением чата: {0}", exp.Message); return string.Empty; }
}
public static string GetPeople()
{
try
{
string data = "#people&";
int countMessages = Server.Clients.Count;
if (countMessages <= 0) return string.Empty;
for (int i = 0; i < countMessages; i++)
{
data += String.Format("{0}|", Server.Clients[i].UserName);
}
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка в передаче информации о людях: {0}", exp.Message); return string.Empty; }
}
}
}
//-------------------------------------------------------//
Client.cs
//-------------------------------------------------------//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace serverChat
{
public static class ChatController
{
private const int _maxMessage = 100;
public static List<message> Chat = new List<message>();
public struct message
{
public string userName;
public string data;
public message(string name, string msg)
{
userName = name;
data = msg;
}
}
public static void AddMessage(string userName, string msg)
{
try
{
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(msg)) return;
int countMessages = Chat.Count;
if (countMessages > _maxMessage) ClearChat();
message newMessage = new message(userName, msg);
Chat.Add(newMessage);
Console.WriteLine("{0}: {1}", userName, msg);
Server.UpdateAllChats();
}
catch (Exception exp) { Console.WriteLine("Ошибка с доставкой: {0}.", exp.Message); }
}
public static void AddLsMessage(string userName, string msg, string au)
{
try
{
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(msg) || string.IsNullOrEmpty(au)) return;
int countMessages = Chat.Count;
if (countMessages > _maxMessage) ClearChat();
message newMessage = new message(userName, msg);
Console.WriteLine("{0}->{2}: {1}", userName, msg, au);
Server.UpdateAllChatsLS(userName, msg, au);
}
catch (Exception exp) { Console.WriteLine("Ошибка с доставкой: {0}.", exp.Message); }
}
public static void ClearChat()
{
Chat.Clear();
}
public static string GetChat()
{
try
{
string data = "#updatechat&";
data += String.Format("{0}~{1}", Chat[Chat.Count - 1].userName, Chat[Chat.Count - 1].data);
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка с отправкой: {0}", exp.Message); return string.Empty; }
}
public static string GetChatLS(string userName, string msg, string au)
{
try
{
string data = "#lss&";
data += String.Format("{0}~{1}|{2}", msg, userName, au);
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка с отправкой: {0}", exp.Message); return string.Empty; }
}
public static string GetSysMessage(string g)
{
try
{
string data = "#sys&";
data += String.Format(g);
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка с обновлением чата: {0}", exp.Message); return string.Empty; }
}
public static string GetPeople()
{
try
{
string data = "#people&";
int countMessages = Server.Clients.Count;
if (countMessages <= 0) return string.Empty;
for (int i = 0; i < countMessages; i++)
{
data += String.Format("{0}|", Server.Clients[i].UserName);
}
return data;
}
catch (Exception exp) { Console.WriteLine("Ошибка в передаче информации о людях: {0}", exp.Message); return string.Empty; }
}}}
//-------------------------------------------------------//
Program.cs
//-------------------------------------------------------//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace serverChat
{
class Program
{
private const string _serverHost = "localhost";
private const int _serverPort = 9933;
private static Thread _serverThread;
static void Main(string[] args)
{
_serverThread = new Thread(startServer);
_serverThread.IsBackground = true;
_serverThread.Start();
while (true)
handlerCommands(Console.ReadLine());
}
private static void handlerCommands(string cmd)
{
cmd = cmd.ToLower();
if (cmd.Contains("/getusers"))
{
int countUsers = Server.Clients.Count;
for (int i = 0; i < countUsers; i++)
{
Console.WriteLine("[{0}]: {1}", i, Server.Clients[i].UserName);
}
}
else
{
}}
private static void startServer()
{
IPHostEntry ipHost = Dns.GetHostEntry(_serverHost);
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, _serverPort);
Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipEndPoint);
socket.Listen(1000);
Console.WriteLine("Сервер запущен по IP: {0}.",ipEndPoint);
while(true)
{
try
{
Socket user = socket.Accept();
Server.NewClient(user);
}
catch (Exception exp) { Console.WriteLine("Ошибка: {0}",exp.Message); }
}}}}
//-------------------------------------------------------//
Server.cs
//-------------------------------------------------------//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
namespace serverChat
{
public static class Server
{
public static List<Client> Clients = new List<Client>();
public static void NewClient(Socket handle)
{
try
{
Client newClient = new Client(handle);
Clients.Add(newClient);
Console.WriteLine("Пользователь {0} присоединился", handle.RemoteEndPoint);
int countUsers = Clients.Count;
UpdateAllUsers();
}
catch (Exception exp) { Console.WriteLine("Ошибка с подключением нового клиента: {0}.",exp.Message); }
}
public static void EndClient(Client client)
{
try
{
client.End();
Clients.Remove(client);
Console.WriteLine("Пользователь {0} отсоединился.", client.UserName);
int countUsers = Clients.Count;
for (int i = 0; i < countUsers; i++)
{
Clients[i].PeopleChat();
}
}
catch (Exception exp) { Console.WriteLine("Ошибка с отключением: {0}.",exp.Message); }
}
public static void UpdateAllChats()
{
try
{
int countUsers = Clients.Count;
for (int i = 0; i < countUsers; i++)
{
Clients[i].UpdateChat();
}
}
catch (Exception exp) { Console.WriteLine("Ошибка с обновлением чатов: {0}.", exp.Message); }
}
public static void UpdateAllChatsLS(string userName, string msg, string au)
{
try
{
int countUsers = Clients.Count;
for (int i = 0; i < countUsers; i++)
{
Clients[i].UpdateChatLS(userName, msg, au);
}
}
catch (Exception exp) { Console.WriteLine("Ошибка с обновлением чатов (ЛС): {0}.", exp.Message); }
}
public static void UpdateAllUsers()
{
try
{
int countUsers = Clients.Count;
for (int i = 0; i < countUsers; i++)
{
Clients[i].PeopleChat();
}}
catch (Exception exp) { Console.WriteLine("Ошибка с обновлением списка: {0}.", exp.Message); }
}}}

//-------------------------------------------------------//
Клиенская часть
//-------------------------------------------------------//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
namespace chatClient
{
public partial class chatForm : Form
{
public class LS
{
public string chatls { get; set; }
}
List<LS> mesls = new List<LS>();
private delegate void printer(string data);
private delegate void cleaner();
printer Printer;
cleaner Cleaner;
private Socket _serverSocket;
private Thread _clientThread;
private const string _serverHost = "localhost";
private const int _serverPort = 9933;
int countls = 0;
int sells = 0;
string obh = "";
string[] ls = new string[999];
public chatForm()
{
InitializeComponent();
}
private void listner()
{
while (_serverSocket.Connected)
{
byte[] buffer = new byte[8196];
int bytesRec = _serverSocket.Receive(buffer);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
if (data.Contains("#updatechat"))
{
UpdateChat(data);
continue;
}
if (data.Contains("#sys"))
{
Sys(data);
continue;
}
if (data.Contains("#people"))
{
People(data);
continue;
}
if (data.Contains("#lss"))
{
Ls(data);
continue;
}
}
}
private void connect()
{
try
{
IPHostEntry ipHost = Dns.GetHostEntry(_serverHost);
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, _serverPort);
_serverSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Connect(ipEndPoint);
}
catch {
print("Сервер недоступен!");
}
}
private void clearChat()
{
if (this.InvokeRequired)
{
this.Invoke(Cleaner);
return;
}
chatBox.Clear();
}
private void UpdateChat(string data)
{
string messages = data.Split('&')[1];
if (label5.Text == "Общий чат")
{
try
{
if (string.IsNullOrEmpty(messages)) { }
print(String.Format("{0}: {1}", messages.Split('~')[0], messages.Split('~')[1]));
}
catch { }
}
obh += String.Format("{0}: {1}|", messages.Split('~')[0], messages.Split('~')[1]);
}
private void Ls(string data)
{
// #lss&mess~userme|useran
if ((userName.Text == data.Split('~')[1].Split('|')[0]) || ((userName.Text == data.Split('|')[1])))
{
if ((label5.Text == data.Split('~')[1].Split('|')[0]) || (label5.Text == data.Split('|')[1]))
{
try
{
if (string.IsNullOrEmpty(data.Split('&')[1].Split('~')[0])) { }
print(String.Format("{0}: {1}", data.Split('~')[1].Split('|')[0], data.Split('&')[1].Split('~')[0]));
}
catch { }
}
if ((label5.Text != data.Split('~')[1].Split('|')[0]) && (label5.Text != data.Split('|')[1]))
{
print(String.Format("У вас новое личное сообщение от: {0}", data.Split('~')[1].Split('|')[0]));
}

int ki = 0;
foreach (LS p in mesls)
{
if (p.chatls.Split('&')[0] == data.Split('|')[1])
{
ki = 1;
p.chatls += String.Format("{0}: {1}|", data.Split('~')[1].Split('|')[0], data.Split('&')[1].Split('~')[0]);
}
}
if (ki == 0)
{
countls++;
mesls.Add(new LS() { chatls = data.Split('~')[1].Split('|')[0] + "&" + String.Format("{0}: {1}|", data.Split('~')[1].Split('|')[0], data.Split('&')[1].Split('~')[0]) });
}
}
}
private void Sys(string data)
{
string messages = data.Split('&')[1];
try
{
if (string.IsNullOrEmpty(messages)) { }
print(String.Format("{0}", messages.Split('|')[0]));
}
catch { }
}
private void People(string data)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
string[] peoples = data.Split('&')[1].Split('|');
listBox1.Items.Clear();
listBox1.Items.Add("Общий чат");
int countpeoples = peoples.Length;
if (countpeoples <= 0) return;
for (int i = 0; i < countpeoples; i++)
{
try
{
if (string.IsNullOrEmpty(peoples[i])) continue;
if ((peoples[i] != "#people") && (peoples[i] != userName.Text)) listBox1.Items.Add(String.Format("{0}", peoples[i]));
}
catch { continue; }
}
}
private void send(string data)
{
try
{
byte[] buffer = Encoding.UTF8.GetBytes(data);
int bytesSent = _serverSocket.Send(buffer);
}
catch { print("Связь с сервером прервалась...");}
}

private void print(string msg)
{
if (this.InvokeRequired)
{
this.Invoke(Printer, msg);
return;
}
if (chatBox.Text.Length == 0)
chatBox.AppendText(msg);
else
chatBox.AppendText(Environment.NewLine + msg);
}
private void enterChat_Click(object sender, EventArgs e)
{
string Connect = "server=localhost;uid=root;password=--123--123--fh;persistsecurityinfo=True;database=work";
string CommandText = "SELECT Count(*) FROM account WHERE name = '" + userName.Text + "' AND pass = '" + textBox1.Text + "' LIMIT 1";
MySqlConnection myConnection = new MySqlConnection(Connect);
MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection);
myConnection.Open();
myCommand.ExecuteNonQuery();
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(myCommand);
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
try
{
string Name = userName.Text;
if (string.IsNullOrEmpty(Name))
{
}
else
{
Printer = new printer(print);
Cleaner = new cleaner(clearChat);
connect();
_clientThread = new Thread(listner);
_clientThread.IsBackground = true;
_clientThread.Start();
send("#setname&" + Name);
chatBox.Enabled = true;
chat_msg.Enabled = true;
chat_send.Enabled = true;
userName.Enabled = false;
listBox1.Enabled = true;
textBox1.Enabled = false;
label4.Text = "Вы подключены: " + userName.Text;
userName.Visible = false;
textBox1.Visible = false;
label5.Visible = true;
gui_userName.Visible = false;
label1.Visible = false;
enterChat.Enabled = false;
enterChat.Visible = false;
button1.Enabled = false;
button1.Visible = false;
label2.Visible = false;
listBox1.Height = 355;
}
}
catch {
MessageBox.Show("Ошибка при подключении! Возможно, сервер не отвечает");
}
}
else
{
label2.Visible = true;
}
myConnection.Close();
}
private void chat_send_Click(object sender, EventArgs e)
{
sendMessage();
}
private void sendMessage()
{
if (!chat_msg.Text.Contains("#") && !chat_msg.Text.Contains("|") && !chat_msg.Text.Contains("~") && (label5.Text == "Общий чат"))
try
{
string data = chat_msg.Text;
if (string.IsNullOrEmpty(data))
{
}
else
{
send("#newmsg&" + data);
chat_msg.Text = string.Empty;
}
}
catch { MessageBox.Show("Ошибка при отправке сообщения!"); }
else if (!chat_msg.Text.Contains("#") && !chat_msg.Text.Contains("|") && !chat_msg.Text.Contains("~"))
try
{
string data = chat_msg.Text;
if (string.IsNullOrEmpty(data))
{
}
else
{
send("#newls&" + data + "~" + userName.Text + "|" + label5.Text);
chat_msg.Text = string.Empty;
}
}
catch { MessageBox.Show("Ошибка при отправке сообщения!"); }
}
private void chatBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
sendMessage();
}
private void chat_msg_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
sendMessage();
}
private void chatForm_Load(object sender, EventArgs e)
{
}
private void userName_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string Connect = "server=localhost;uid=root;password=--123--123--fh;persistsecurityinfo=True;database=work";
string CommandText = "SELECT Count(*) FROM account WHERE name = '" + userName.Text + "' LIMIT 1";
MySqlConnection myConnection = new MySqlConnection(Connect);
MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection);
myConnection.Open();
myCommand.ExecuteNonQuery();
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(myCommand);
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
if (dt.Rows[0][0].ToString() == "0")
{
CommandText = "INSERT INTO `work`.`account` (`name`, `pass`) VALUES ('" + userName.Text + "', '" + textBox1.Text + "');";
myCommand = new MySqlCommand(CommandText, myConnection);
myCommand.ExecuteNonQuery();
}
myConnection.Close();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (Convert.ToString(listBox1.SelectedItem) == "Общий чат")
{
label5.Text = "Общий чат";
clearChat();
string[] messages = obh.Split('|');
int countMessages = obh.Length;
if (countMessages <= 0) return;
for (int i = 0; i < countMessages; i++)
{
try
{
if (string.IsNullOrEmpty(messages[i])) continue;
print(String.Format(messages[i]));
}
catch { continue; }
}
}
else
{
int k = 0;
foreach (LS p in mesls)
{
if (p.chatls.Split('&')[0] == Convert.ToString(listBox1.SelectedItem))
{
label5.Text = Convert.ToString(listBox1.SelectedItem);
k = 1;
clearChat();
string[] messages = p.chatls.Split('&')[1].Split('|');
int countMessages = p.chatls.Length;
if (countMessages <= 0) return;
for (int l = 0; l < countMessages; l++)
{
try
{
if (string.IsNullOrEmpty(messages[l])) continue;
print(String.Format(messages[l]));
}
catch { continue; }
}
}
}
if (k == 0)
{
label5.Text = Convert.ToString(listBox1.SelectedItem);
clearChat();
mesls.Add(new LS() { chatls = Convert.ToString(listBox1.SelectedItem) + "&" });
}
}}}}

« Предыдущая Следующая »
Похожие публикации
Разработка презентации учебного содержания по теме «Массивы. Типовые задачи обработки массивов» школьного курса информатики Средствами Интернет-сервиса «MSPowerPoint»
Курсовая работа по теме "Разработка презентации учебного содержания по теме «Массивы. Типовые задачи обработки массивов» школьного курса информатики Средствами Интернет-сервиса «MSPowerPoint»".
Обоснование требований к системе защиты значимого объекта критической информационной инфраструктуры
Курсовая работа по теме "Обоснование требований к системе защиты значимого объекта критической информационной инфраструктуры".