|
-§. Dasturiy vosita yaratishda qo‘llaniladigan komponenlar tavsifi
|
bet | 6/11 | Sana | 16.05.2024 | Hajmi | 0,59 Mb. | | #238978 |
Bog'liq Nabijonov Asliddining kurs ishi 2-§. Dasturiy vosita yaratishda qo‘llaniladigan komponenlar tavsifi
Tarmoqdagi eng keng tarqalgan aloqa protokollaridan biri TCP (Transmission Control Protocol) hisoblanadi. Ushbu protokol xabarlarni yetkazib berishni kafolatlaydi va bugungi kunda mavjud bo'lgan turli dasturlarda keng qo'llaniladi. TcpClient va TcpListener sinflari .NET da TCP protokoli bilan ishlash uchun mo'ljallangan . Bu sinflar System.Net.Sockets.Socket sinfining ustiga qurilgan . TcpClient va TcpListener TCP protokolini amalga oshiradigan mijoz va serverni yaratishni osonlashtiradi. Agar ushbu sinflarning funksionalligi etarli bo'lmasa, yanada rivojlangan va murakkab stsenariylar uchun siz bir xil Socket sinfidan foydalanishingiz mumkin. Ushbu bobda biz Tcp mijozi va Tcp serverini yaratishda TcpClient va TcpListener va sok rozetkalardan foydalangan holda turli yondashuvlarni ko'rib chiqamiz.
Ulanish ma'lumotlari
Masofaviy xostga ulangandan so'ng biz uning manzilini (ya'ni IP manzil + port) RemoteEndPoint xususiyatidan foydalanib olishimiz mumkin . Bundan tashqari, biz LocalEndPoint xususiyatidan foydalanib, rozetkaning manzilini olishimiz mumkin :
using System.Net.Sockets;
var port = 80;
var url = "www.google.com";
using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// пытаемся подключиться используя URL-адрес и порт
await socket.ConnectAsync(url, port);
Console.WriteLine($"Подключение к {url} установлено");
Console.WriteLine($"Адрес подключения {socket.RemoteEndPoint}");
Console.WriteLine($"Адрес приложения {socket.LocalEndPoint}");
}
catch (SocketException)
{
Console.WriteLine($"Не удалось установить подключение к {url}");
}
Ma'lumotlarni yuborish
Ma'lumotlarni yuborish uchun Send()/SendAsync() usuli qo'llaniladi . Ushbu usullarning ikkalasi ham turli xil versiyalarga ega. Keling, eng oddiy versiyalarni ko'rib chiqaylik.
Parametr sifatida u yuborilgan ma'lumotlarni struktura ko'rinishida oladi ArraySegment- taxminan, bayt massivining bir qismi. Bundan tashqari, siz SocketFlags raqamlash qiymatlari yordamida yuborish parametrlarini o'rnatishingiz mumkin. Natijada, usul SendAsync()yuborilgan ma'lumotlar miqdorini qaytaradi. Masalan, google.com saytiga ba'zi ma'lumotlar bilan so'rov yuboraylik:
using System.Net.Sockets;
using System.Text;
var port = 80;
var url = "www.google.com";
using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
await socket.ConnectAsync(url, port);
// определяем отправляемые данные
var message = $"GET / HTTP/1.1\r\nHost: {url}\r\nConnection: close\r\n\r\n";
// конвертируем данные в массив байтов
var messageBytes = Encoding.UTF8.GetBytes(message);
int bytesSent = await socket.SendAsync(messageBytes);
Console.WriteLine($"на адрес {url} отправлено {bytesSent} байт(а)");
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
}
|
| |