Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Екзамен з комп. арх..doc
Скачиваний:
4
Добавлен:
17.09.2019
Размер:
449.02 Кб
Скачать

36. Узагальнений алгоритм взаємодії клієнта та сервера при синхронному сокетному способі обміну даними без з’єднання. Інтерфейс класу tcpClient..

В режиме без установления соединения обмен информацией ведется отдельными блоками данных, часто называемых дейтаграммами и содержащими в себе помимо собственно данных еще и адрес их получателя. В этом режиме, как правило, не гарантируется надежность доставки данных, может быть нарушена правильная последовательность дейтаграмм на принимающей стороне. Режим без установления соединения - протокол UDP.

Алгоритм клієнта:

  1. create - створення сокета

  2. read/write - читання і запис даних з/на сервер.

  3. можна ще перевіряти чи все ок дійшло

Алгоритм сервера тут хз всі сервакти TCP:

  1. create - створення сокета

  2. bind - прив'язування сокета до локальної IP - адреси.

  3. listen — переведення сокета в режим прослуховування

  4. accept — підтвердження запиту клієнта, повернення сокета клієнта для передачі даних

  5. read/write — обмін даними

  6. close — розривання з’єднання

public static void Main() {

byte[] data = new byte[1024];

string input, stringData;

UdpClient server = new UdpClient("127.0.0.1", 9050);

IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);

string welcome = "Hello, are you there?";

data = Encoding.ASCII.GetBytes(welcome);

server.Send(data, data.Length);

data = server.Receive(ref sender);

stringData = Encoding.ASCII.GetString(data, 0, data.Length);

Console.WriteLine(stringData);

while(true) {

input = Console.ReadLine();

if (input == "exit")

break;

server.Send(Encoding.ASCII.GetBytes(input), input.Length);

data = server.Receive(ref sender);

stringData = Encoding.ASCII.GetString(data, 0, data.Length);

Console.WriteLine(stringData);

} server.Close(); }

клас TCPListener виконує роль найпростішого TCP-сервера, що може прослуховувати клієнтів синхронно і асинхронно і повертати сокети, з допомогою яких здійснюється передача даних

Методи Connect, BeginConnect - Подключает клиента к удаленному TCP-узлу (синхронно, асинхронно) EndConnect - Асинхронно принимает попытку входящего подключения. GetStream - Возвращает объект NetworkStream, используемый для отправки и получения данных. Close - Удаляет данный экземпляр TcpClient и запрашивает закрытие основного подключения TCP.

static void Connect(String server, String message){ try { Int32 port = 13000; TcpClient client = new TcpClient(server, port); Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); NetworkStream stream = client.GetStream(); // Send the message to the connected TcpServer. stream.Write(data, 0, data.Length); // Receive the TcpServer.response. // Buffer to store the response bytes. data = new Byte[256]; // String to store the response ASCII representation. String responseData = String.Empty; Int32 bytes = stream.Read(data, 0, data.Length); responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); // Close everything. stream.Close(); client.Close(); } catch (ArgumentNullException e) { Console.WriteLine("ArgumentNullException: {0}", e); } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } }