- •Содержание
- •Введение
- •1. Анализ предметной области
- •1.1Обзор предметной области
- •1.2Постановка задачи
- •1.3 Выводы по главе
- •2. Алгоритмическое конструирование
- •2.1. Структура работы форм
- •2.2 Выводы по главе
- •3. Программное конструирование
- •3.1 Обоснование выбора языка программирования
- •3.2 Основные модули программного средства
- •3.2.1 Форма ChatServer
- •3.2.2. Форма ChatClient
- •3.2.3 Форма PrivateChanel
- •3.4. Выводы по главе
- •4. Тестирование программного средства
- •Заключение
- •Приложение а
- •2. Основание для разработки
- •3. Назначение разработки
- •4. Требование к программе
- •5. Требование к программной документации
- •6. Стадии и этапы разработки
- •7. Порядок приема и контроля
- •Приложение б
5. Требование к программной документации
5.1 Предварительный состав программной документации
Состав программной документации должен включать в себя:
техническое задание ГОСТ 19.201;
задание к учебной практике;
текст программы по 19.401-78.
6. Стадии и этапы разработки
Таблица 1 – Стадии и этапы разработки
Этапы разработки |
Время работы в часах |
Первоначальное обдумывание проекта |
2 |
Создание чернового варианта |
4 |
Создание псевдокода |
2 |
Пробный запуск программы |
0.5 |
Исправление ошибок |
3 |
Составление документации |
2 |
Вывод конечного исправного варианта |
3 |
7. Порядок приема и контроля
Контроль производится в университете, на компьютерах в ходе защиты курсовой работы. Пример для проверки дается преподавателем.
Разработал
студент гр. ВПР_2 «____»____________20__год
Благодарный Александр Васильевич
Приложение б
Исходный код программного средства
Полный исходный код проекта находится на прилагаемом носителе.
Листинг Б.1 - Исходный код формы ChatServer
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 NetworksApi.TCP.SERVER;
using System.Media;
using System.IO;
using System.Net;
namespace ChatServer
{
public delegate void UpdateChatLog(string txt);
public delegate void UpdateListBox(ListBox box, string value, bool Remove);
public partial class ChatServer : Form
{
Server server;
public ChatServer()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
server = new Server("192.168.1.100", "7770");
server.OnClientConnected += new OnConnectedDelegate(Server_OnClientConnected);
server.OnClientDisconnected += new OnDisconnectedDelegate(Server_OnClientDisconnected);
server.OnDataReceived += new OnReceivedDelegate(Server_OnDataReceived);
server.OnServerError += new OnErrorDelegate(Server_OnServerError);
server.Start();
}
private void ChangeChatLog(string txt)
{
if (richTextBox1.InvokeRequired)
{
Invoke(new UpdateChatLog(ChangeChatLog), new object[] { txt });
SoundPlayer player = new SoundPlayer("@/media/Windows Proximity Notification.wav");
player.Play();
}
else
{
richTextBox1.Text += txt + "\r\n";
}
}
private void ChangeListBox(ListBox box, string value, bool Remove)
{
if (box.InvokeRequired)
{
Invoke(new UpdateListBox(ChangeListBox), new object[] { box, value, Remove });
}
else
{
if (Remove)
{
box.Items.Remove(value);
}
else
{
box.Items.Add(value);
}
}
}
private void Server_OnServerError(object Sender, ErrorArguments R)
{
MessageBox.Show(R.ErrorMessage);
}
private void Server_OnDataReceived(object Sender, ReceivedArguments R)
{
ChangeChatLog(R.ReceivedData);
server.BroadCast(R.ReceivedData);
}
private void Server_OnClientDisconnected(object Sender, DisconnectedArguments R)
{
server.BroadCast("Кто-то уходит");
ChangeListBox(listBox1, R.Name, true);
ChangeListBox(listBox2, R.Ip, true);
}
private void Server_OnClientConnected(object Sender, ConnectedArguments R)
{
server.BroadCast("Кто-то заходит");
ChangeListBox(listBox1, R.Name, false);
ChangeListBox(listBox2, R.Ip, false);
}
private void button1_Click(object sender, EventArgs e)
{
server.SendTo((string )listBox1.SelectedItem, textBox2.Text);
}
private void button2_Click(object sender, EventArgs e)
{
server.BroadCast(textBox2.Text);
}
private void button3_Click(object sender, EventArgs e)
{
server.DisconnectClient((string)listBox1.SelectedItem);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(System.Environment.ExitCode);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.SelectedIndex = listBox1.SelectedIndex;
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
listBox1.SelectedIndex = listBox2.SelectedIndex;
}
}
}
Листинг Б.2 - Исходный код формы ChatClient
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 NetworksApi.TCP.CLIENT;
using System.Media;
namespace WindowsFormsApplication1
{
public delegate void UpdateText(string txt);
public partial class ChatClient : Form
{
Client client;
public ChatClient()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.ScrollToCaret();
}
private void ChangeTextBox(string txt)
{
if(richTextBox1.InvokeRequired)
{
Invoke(new UpdateText(ChangeTextBox), new object[] { txt });
}
else
{
richTextBox1.Text += txt + "\r\n";
}
}
// Присоединение к серверу
private void button3_Click(object sender, EventArgs e)
{
if (textBox3.Text != "" || textBox4.Text != "" || textBox5.Text != "")
{
client = new Client();
client.ClientName = textBox4.Text;
client.ServerIp = textBox3.Text;
client.ServerPort = textBox5.Text;
client.OnClientConnected += new OnClientConnectedDelegate(client_OnClientConnected);
client.OnClientConnecting += new OnClientConnectingDelegate(client_OnClientConnecting);
client.OnClientDisconnected += new OnClientDisconnectedDelegate (client_OnClientDisconnected);
client.OnClientError += new OnClientErrorDelegate(client_OnClientError);
client.OnDataReceived += new OnClientReceivedDelegate(Client_OnDataReceived);
client.Connect();
button3.Enabled =false;
}
else
{
MessageBox.Show("Заполните все верхние поля!");
}
}
//получение данных
private void Client_OnDataReceived(object Sender, ClientReceivedArguments R)
{
ChangeTextBox(R.ReceivedData);
SoundPlayer player = new SoundPlayer("@/media/Windows Proximity Notification.wav");
player.Play();
}
private void client_OnClientError(object Sender, ClientErrorArguments R)
{
ChangeTextBox(R.ErrorMessage);
}
private void client_OnClientDisconnected(object Sender, ClientDisconnectedArguments R)
{
ChangeTextBox(R.EventMessage);
}
private void client_OnClientConnecting(object Sender, ClientConnectingArguments R)
{
ChangeTextBox(R.EventMessage);
}
private void client_OnClientConnected(object Sender, ClientConnectedArguments R)
{
ChangeTextBox(R.EventMessage);
}
//отправка сообщения
private void button1_Click(object sender, EventArgs e)
{
if (client != null && client.IsConnected)
{
client.Send(textBox4.Text + ": " + textBox2.Text);
textBox2.Clear();
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox2.Clear();
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (client != null && client.IsConnected && e.KeyCode == Keys.Enter)
{
client.Send(textBox4.Text + ": " + textBox2.Text);
textBox2.Clear();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(System.Environment.ExitCode);
}
private void button4_Click(object sender, EventArgs e)
{
{
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = @"Private\Chat\Chat\bin\Debug\Chat.exe";
p.Start();
}
}
}
}
}
Листинг Б.3 - Исходный код формы PrivateChanel
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;
using System.Net.Sockets;
using System.Media;
namespace Chat
{
public partial class PrivateChanel : Form
{
Socket socket;
EndPoint localEndPoint, remoteEndPoint;
public PrivateChanel()
{
InitializeComponent();
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
textLocalIP.Text = GetLocalIP();
textFriendsIP.Text = GetLocalIP();
}
private string GetLocalIP()
{
IPHostEntry host;
host = Dns.GetHostEntry(Dns.GetHostName());
foreach(IPAddress ip in host.AddressList)
{
if(ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return "127.0.0.1";
}
private void MessageCallBack(IAsyncResult aResult)
{
try
{
int size = socket.EndReceiveFrom(aResult, ref remoteEndPoint);
if(size>0)
{
byte[] receiveData = new byte[1464];
receiveData = (byte[])aResult.AsyncState;
UTF8Encoding eEnconding = new UTF8Encoding();
string receivedMessage = eEnconding.GetString(receiveData);
listMessage.Items.Add("Собеседник: " + receivedMessage);
SoundPlayer player = new SoundPlayer("@/media/Windows Proximity Notification.wav");
player.Play();
}
byte[] buffer = new byte[1500];
socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref remoteEndPoint, new AsyncCallback(MessageCallBack), buffer);
}
catch(Exception exp)
{
MessageBox.Show(exp.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
}
private void groupBox1_Enter(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
try
{
localEndPoint = new IPEndPoint(IPAddress.Parse(textLocalIP.Text), Convert.ToInt32(textLocalPort.Text));
socket.Bind(localEndPoint);
remoteEndPoint = new IPEndPoint(IPAddress.Parse(textFriendsIP.Text), Convert.ToInt32(textFriendsPort.Text));
socket.Connect(remoteEndPoint);
byte[] buffer = new byte[1500];
socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref remoteEndPoint, new AsyncCallback(MessageCallBack), buffer);
button1.Text = "OK";
button1.Enabled = false;
button2.Enabled = true;
textMessage.Focus();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void button2_Click_1(object sender, EventArgs e)
{
try
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
byte[] msg = new byte[1500];
msg = enc.GetBytes(textMessage.Text);
socket.Send(msg);
listMessage.Items.Add("Вы: " + textMessage.Text);
textMessage.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void textMessage_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
try
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
byte[] msg = new byte[1500];
msg = enc.GetBytes(textMessage.Text);
socket.Send(msg);
listMessage.Items.Add("Вы: " + textMessage.Text);
textMessage.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
