Завершенные
#32967

Лабораторная работа на тему «Создание простого клиент-серверного приложения «Эхо»»

Похожие заявки
Лабораторная, Информационные технологии
Бюджет: По договоренности
Лабораторная, Электроника, электротехника, радиотехника
Бюджет: По договоренности
Контрольная работа, Другое
Бюджет: По договоренности
Создан:
16 февраля 2023
Срок сдачи:
30 ноября -0001
Бюджет:
900 руб.
Предмет:
Другое
Тип работы:
Лабораторная
Вуз:
Объем:
от 1 до 4 стр.
Шрифт:
Интервал:
Оригинальность:
%
Описание:
Задание. Создать клиент-серверное приложение (простейший эхо-сервер + клиент), работающее по протоколу TCP, с помощью сокетов. Предлагается на выбор реализация на языках С# (вариант 1) или C (вариант 2).

Порядок выполнения работы.

1. Создать 2 (два) консольных проекта и поместить туда представленный ниже код сервера и код клиента.

2. Запустить сначала сервер.

3. Потом запускать клиентов.

4. Убедиться, что все работает.

5. Потом в режиме отладки (по шагам) смотреть как работает сервер и как работает клиент. Понять, в какие моменты происходит зависание программы.

6. В отчете с титульным листом предоставьте файл с описанием работы сервера и клиента, скриншот работы простейшего приложения, использующего сокеты. Должно быть видно окно клиента и сервера на одном рисунке.

Вариант 1.

Исходный код сервера на языке C#.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.Net.Sockets;

namespace SocketTcpServer

{

class Program

{

static int port = 8005; // порт для приема входящих запросов

static void Main(string[] args)

{

String Host = Dns.GetHostName();

Console.WriteLine(«Comp name = » + Host);

IPAddress[] IPs;

IPs=Dns.GetHostAddresses(Host);

foreach (IPAddress ip1 in IPs)

Console.WriteLine(ip1);

//получаем адреса для запуска сокета

IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(«127.0.0.1»), port);

// создаем сокет сервера

Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

try

{

// связываем сокет с локальной точкой, по которой будем принимать данные

listenSocket.Bind(ipPoint);

// начинаем прослушивание

listenSocket.Listen(10);

Console.WriteLine(«Сервер запущен. Ожидание подключений…»);

while (true)

{

Socket handler = listenSocket.Accept(); // сокет для связи с клиентом

// готовимся получать сообщение

StringBuilder builder = new StringBuilder();

int bytes = 0; // количество полученных байтов за 1 раз

int kol_bytes = 0;//количество полученных байтов

byte[] data = new byte[255]; // буфер для получаемых данных

do

{

bytes = handler.Receive(data); // получаем сообщение

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

kol_bytes += bytes;

}

while (handler.Available > 0);

Console.WriteLine(DateTime.Now.ToShortTimeString() + «: » + builder.ToString());

Console.WriteLine(kol_bytes+»bytes\n»);

// отправляем ответ

string message = «ваше сообщение доставлено»;

// закрываем сокет

handler.Shutdown(SocketShutdown.Both);

handler.Close();

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

Исходный код клиента на языке C#.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.Net.Sockets;

namespace SocketTcpClient

{

class Program

{

// адрес и порт сервера, к которому будем подключаться

static int port = 8005; // порт сервера

static string address = «127.0.0.1»; // адрес сервера

static void Main(string[] args)

{

try

{ //создаем конечную точку

IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);

//создаем сокет

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// подключаемся к удаленному хосту

socket.Connect(ipPoint);

StringBuilder builder = new StringBuilder();

Console.Write(«Введите сообщение:»);

string message = Console.ReadLine();

byte[] data = Encoding.Unicode.GetBytes(message);

//посылаем сообщение

socket.Send(data);

// готовимся получить ответ

data = new byte[256]; // буфер для ответа

int bytes = 0; // количество полученных байт

// получаем ответ

do

{

bytes = socket.Receive(data, data.Length, 0);

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket.Available > 0);

Console.WriteLine(«ответ сервера: » + builder.ToString());

// закрываем сокет

socket.Shutdown(SocketShutdown.Both);

socket.Close();

}

catch(Exception ex)

{

Console.WriteLine(ex.Message);

}

Console.Read();

}

}

}

Вариант 2.

Исходный код сервера на языке C.

using namespace std;

#include

#include

#include

#include

#pragma comment(lib, «Ws2_32.lib»)

#define SERVER_PORT 3817

int _tmain(int argc, _TCHAR* argv[])

{setlocale(LC_CTYPE, «Russian»); // включаем русскую кодировку

struct sockaddr_in SrvAddr; // Адресная структура сервера

struct sockaddr_in ConnAddr; // Адресная структура клиента

SOCKET SrvSock, Conn;

WSADATA wsaData; // для работы Windows с сокетами

int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);

if(iResult
Узнай стоимость помощи по твоей работе
На нашем сервисе более 1000 профессиональных исполнителей, которые готовы выполнить ваше задание. Опишите его и получите их предложения с ценой.
Предложения (0)