Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Міністерство освіти і науки молоді та спорту України
Національний університет "Львівська політехніка"
Інститут післядипломної освіти
Кафедра програмного забезпечення
Звіт для
Лабораторної роботи
Виконав студент
групи ПІ-31з
Михалечко Назарій
Львів 2013
Лабораторна робота
Тема: створення клієнт/серверних програм за допомогою бібліотек C#.
Мета: навчитись концепціям програмування мовою C#, а також засвоїти основні стандартні класи і методи бібліотеки net.
Розглянемо класи простору назв System.Net, на базі яких розробляються програми сервера та клієнта для спілкування між собою на основі TCP та UDP протоколів. В протоколі TCP/IP кожний компютер ідентифікується цілим числом довжиною в чотири байти IP-адресою (наприклад, форматованим як 192.168.0.101). Для кращого запамятовування ця IP-адреса привязується до назви вузлового компютера -хоста.
Створення сервера чи клієнта повязане з формуванням обєкту сокету для прийняття запитів та надсилання відповідей. Для формування сокета необхідно знати IP-адресу компютера, на якому виконується сервер, та номер TCP порту. Для визначенння IP-адреси за назвою хоста використовується клас DNS для сполучення з DNS-сервером. Відповідні команди записуються наступним чином:
// DNS: за назвою хосту визначення IP-адреси
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
// створення обєкту порт+ IP-адреса
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
В цьому фрагменті присутні класи IPHostEntry, IPAddress певні структури даних, методи яких дозволяють отимати їх властивості, а саме:
- Dns.GetHostName()- повертає назву компютера,
- Dns.Resolve() - повертає обєкт IPHostEntry інформації щодо компютера з заданою назвою, в тому числі AddressList властивість, для повернення IP-адреси компютера (типу IPAdress). Метод Resolve() генерує виняткову ситуацію, якщо хост не знайдено.
Завдання до лабораторної роботи
Реалізація завдання
Клієнт
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net.Sockets;
using System.IO;
namespace Client
{
class Program
{
private static System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
static void Main(string[] args)
{
Console.WriteLine ("Client Started");
// Створюєм сокет і конектимсь до серевера в порт 1234
clientSocket.Connect("127.0.0.1", 1234);
//получаєм потік
NetworkStream serverStream = clientSocket.GetStream();
BinaryWriter Write = new BinaryWriter(serverStream);
string g="";
// до поки не ведено stop зчитуєм інформацію і відправляєм серверу
while (g!="stop")
{
g=Console.ReadLine();
Write.Write(g);
}
serverStream.Close();
Console.Read();
}
}
}
Сервер
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net.Sockets;
using System.IO;
namespace three
{
class Program
{
private static TcpListener server = new TcpListener(1234);
private static TcpClient client = new TcpClient();
/// <summary>
/// клас підключення
/// </summary>
public class Connection
{
public TcpClient cl;
/// <summary>
/// функція роботи клієнта з сервером
/// </summary>
public void Work()
{
try
{
NetworkStream networkStream = cl.GetStream();
BinaryReader Reader = new BinaryReader(networkStream); //зчитування
while (networkStream.CanRead)
{
string g = Reader.ReadString();
Console.WriteLine("{0}>> {1}", cl.Client.RemoteEndPoint, g);
//якщо клієнт вів stop відключаєм його
if (g == "stop")
{
Console.WriteLine("client {0} out ", cl.Client.LocalEndPoint);
cl.Client.Close();
networkStream.Close();
Reader.Close();
break;
}
Reader.BaseStream.Flush();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
static void Main(string[] args)
{
server.Start();
Console.WriteLine("server start...");
while (true)
{
Console.WriteLine("wait to client..");
client = server.AcceptTcpClient();
if (client.Client.Connected)
{
NetworkStream networkStream = client.GetStream();
Console.WriteLine("начата работа с кліентом {0}", client.Client.RemoteEndPoint);
Connection c = new Connection();
c.cl = client;
// створюєм окремий поті для клієнта
Thread t = new Thread(new ThreadStart(c.Work));
t.IsBackground = false;
t.Start();
}
}
server.Stop();
Console.WriteLine(" >> exit");
Console.Read();
} } }}
Робота сервера
Робота клієнтів