Mavzu: Soketlar


III.UDP bilan ishlash uchun soketlardan foydalanish



Download 160 Kb.
bet3/4
Sana28.06.2022
Hajmi160 Kb.
#712120
1   2   3   4
Bog'liq
Soketlar

III.UDP bilan ishlash uchun soketlardan foydalanish
UDP doimiy ulanishni talab qilmaydi va ko'pchilik UDP bilan ishlashni TCP ga qaraganda osonroq deb bilishi mumkin. UDP bilan ishlash tamoyillarining aksariyati TCP bilan bir xil.
Birinchidan, rozetka yaratiladi:
Socket socket = new
Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Agar rozetka xabarlarni qabul qiladigan bo'lsa, uni mahalliy manzilga Bind usuli yordamida portlardan biriga ulashingiz kerak:
IPEndPoint localIP = new
IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555);
socket.Bind(localIP);
Keyin foydalanuvchi xabarlarni yuborishi va qabul qilishi mumkin. ReceiveFrom () usuli xabarlarni qabul qilish uchun ishlatiladi :
byte[] data = new byte[256]; //qabul qilingan ma’lumotlar uchun buffer
//ma’lumotlar kelgan manzil
EndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);
int bytes = socket.ReceiveFrom(data, ref remoteIp);
Parametr sifatida baytlar massivi ma'lumotlar o'qilishi kerak bo'lgan usulga va bu ma'lumotlar keladigan masofaviy nuqtaga uzatiladi. Usul o'qilgan baytlar sonini qaytaradi.
SendTo () usuli ma'lumotlarni yuborish uchun ishlatiladi :
string message = Console.ReadLine();
byte[] data = Encoding.Unicode.GetBytes(message);
EndPoint remotePoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), remotePort);
listeningSocket.SendTo(data, remotePoint);
Usulga yuboriladigan ma'lumotlar massivi, shuningdek, ushbu ma'lumotlar yuborilishi kerak bo'lgan manzilga uzatiladi.
UDP mijoz dasturini yaratamiz:
using System;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace SocketUdpClient
{
class Program
{
static int localPort; //xabarni qabul qilish porti
static int remotePort; //xabarlarni yuborish uchun port
static Socket listeningSocket;
static void Main(string[] args)
{
Console.Write("Xabarlarni qabul qilish uchun portini kiriting: ");
localPort = Int32.Parse(Console.ReadLine());
Console.Write("xabar yuborish uchun portni kiriting: ");
remotePort = Int32.Parse(Console.ReadLine());
Console.WriteLine("Xabar yuborish uchun xabaringizni kiriting va Enter tugmasini bosing");
Console.WriteLine();
try
{
listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Task listeningTask = new Task(Listen);
listeningTask.Start();
//turli portlarga xabar yuborish
while (true)
{
string message = Console.ReadLine();
byte[] data = Encoding.Unicode.GetBytes(message);
EndPoint remotePoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), remotePort);
listeningSocket.SendTo(data, remotePoint);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Close();
}
}
//Ulanishlarni qabul qilish uchun oqim
private static void Listen()
{
try
{
//Manzilni tinglaymiz
IPEndPoint localIP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), localPort);
listeningSocket.Bind(localIP);
while (true)
{
//Xabar olamiz
StringBuilder builder = new StringBuilder();
int bytes = 0; //qabul qilingan baytlar soni
byte[] data = new byte[256]; //qabul qilingan ma’lumotlar uchun bufer
//ma’lumotlar kelgan manzil
EndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0);
do
{
bytes = listeningSocket.ReceiveFrom(data, ref remoteIp);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (listeningSocket.Available > 0);
//Ulanish ma’lumotlarini olish
IPEndPoint remoteFullIp = remoteIp as IPEndPoint;
//xabarni ko’rsatish
Console.WriteLine("{0}:{1} - {2}", remoteFullIp.Address.ToString(),
remoteFullIp.Port, builder.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Close();
}
}
private static void Close()
{
if (listeningSocket != null)
{
listeningSocket.Shutdown(SocketShutdown.Both);
listeningSocket.Close();
listeningSocket = null;
}
}
}
}
Birinchidan, foydalanuvchi ma'lumotlarni qabul qilish va jo'natish uchun portlarga kiradi. Bir-biri bilan o'zaro aloqada bo'ladigan ikkita mijoz ilovasi bitta mahalliy mashinada ishlaydi deb taxmin qilinadi. Agar mijozlarning manzillari boshqacha bo'lsa, ma'lumotlarni yuborish uchun manzilni kiritishni ta'minlash mumkin.
Portlarga kirgandan so'ng, kiruvchi xabarlarni tinglash vazifasi ishga tushiriladi. TCP serveridan farqli o'laroq, bu erda Tinglash va Qabul qilish usullarini chaqirishingiz shart emas. Cheksiz siklda biz to'g'ridan-to'g'ri ma'lumotlarning ReceiveFrom()keyingi qismi kelguniga qadar chaqiruvchi ipni bloklaydigan usul yordamida ma'lumot qabul qilishimiz mumkin .
Ushbu usul ref parametri orqali ma'lumot olingan masofaviy nuqtani qaytaradi:
IPEndPoint remoteFullIp = remoteIp as IPEndPoint;
Ya'ni, bu holda xabarlarni qabul qilish va jo'natish chegaralangan bo'lsa-da va joriy mijoz ma'lumotlarni faqat boshida kiritilgan portga yuboradi, ammo biz qabul qilingan ma'lumotlardan foydalangan holda xabarlarga javob berish qobiliyatini qo'shishimiz mumkin. masofaviy nuqta (manzil va port).
Asosiy mavzuda xabarlar SendTo () usuli yordamida yuboriladi
Shunday qilib, dastur darhol serverning ham, mijozning ham funktsiyalarini bajaradi.
Endi ilovaning ikkita nusxasini ishga tushiramiz va portlar uchun turli ma'lumotlarni kiritamiz. Birinchi mijoz:
Xabarlarni qabul qilish uchun portni kiriting: 4004
Xabarlarni yuborish uchun portni kiriting: 4005
Xabar yuborish uchun xabaringizni kiriting va Enter tugmasini bosing

127.0.0.1:4005 - salom port 4004


Xayrli kun, port 4005
ajoyib ob-havo
Ikkinchi mijoz:
Xabarlarni qabul qilish uchun portni kiriting: 4005
Xabarlarni yuborish uchun portni kiriting: 4004
Xabar yuborish uchun xabaringizni kiriting va Enter tugmasini bosing

Salom port 4004


127.0.0.1:4004 - xayrli kun, port 4005
127.0.0.1:4004 - ajoyib ob-havo


Download 160 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish