Oqimlarni tashkil etish - 2-mavzu. Tarmoqni dasturlashda ko‘poqimlilik va funksiyalarni paralellashtirish Reja

|
2-mavzu. Tarmoqni dasturlashda ko‘poqimlilik va funksiyalarni paralellashtirish Reja
|
bet | 2/5 | Sana | 17.01.2024 | Hajmi | 108,22 Kb. | | #139644 |
Bog'liq 2 Oqimlarni tashkil etish
IGMP (ingl. Internet Group Management Protocol — Internet guruhlarini boshqarish protokoli) — IP protokoliga asoslangan tarmoqlarda ma’lumotlarni guruhli yuborish (multicast)ni boshqarish protokoli. IGMP tarmoq qurilmalarni guruhlarga tashkillash uchun marshrutizator va IP-tugunlar tomonidan ishlatiladi.
Bu protokol IP-tarmoqlarda paketlarni guruhli yuborishning spetsifikatsiyasining qismidir. IGMP tarmoq qatlamida joylashadi. U ko‘p jixatdan bir tomonlama yuborishga mo‘ljallangan ICMPga o‘xshaydi. IGMP oqimli video va onlayn-o‘yinlarni quvvatlash uchun ishlatilishi mumkin, bu turdagi ilovalar uchun u tarmoq resurslaridan samarali foydalanishga imkon beradi. IGMP ba’zi taxdidlarga ximoyasiz va odatda brandmauerlar foydalanuvchiga bu protokolni extiyoj yo‘q bo‘lsa o‘chirishga ruxsat beradi.
Oqim klasslari bilan ishlash.
Ushbu ma’ruzada soket sinfidagi soketlar bilan ishlovchi mijoz dasturlarini ko‘rsatib o‘tamiz.
Mijoz dasturini initsializatsiya qilganda soket sinfi ob’ekti sifatida soket yaratib, server dasturining IP manzili va ishlatadigan port raqamini ko‘rsatish kerak:
Socket s;
s = new Socket("localhost", 8000);
Bu yerda IP manzil sifatiida tarmoq dasturlarini tekshirish uchun mo‘ljallangan local hostning maxsus manzilini, port sifatida server tomonidan ServerSocket sinfidagi ob’ektni yaratganda ishlatigan 8000 raqamini ko‘rsatdik. Endi kirish va chiqish oqimlarini yaratsak bo‘ladi. Mijoz tomonida bu operatsiya server tomonida qanday qilinsa shunday qilinadi:
InputStream is;
OutputStream os;
is = s.getInputStream();
os = s.getOutputStream();
Boshlang‘ich tekstlari oldingi qismda tushintirilgan bizning mijozda turiserver bilan ishlashi lozim, bunda oldin serverda turini keyin esa mijozda turini ishga tushirish kerak.
Bizning kliyent ishga tushgandan keyin darhol server bilan bog‘lanib, ishlatilgan lokal port raqamini konsolga chiqaradi:
* Socket Client *
Local Port: 1180
Hello from client Application!
* Hello from client Application! *
qwerty
* qwerty *
quit
So‘ng siz serverga jo‘natiladigan hoxlagan qatorlarini kiritishingiz mumkin. Server ularga yulduzchani qo‘shib mijozga qaytaradi, mijoz esa qabul qilingan ma’lumotlarni konsolda ko‘rstadi.
Agarda “quit” qatorini kiritsak, server ham mijoz ham ishini tugatadi.
Agarda siz mijoz dasturini server dasturidan oldin ishga tushirsangiz, unda mijoz dasturi ConnectException mustasno bilan tugaydi:
* Socket Client *
java.net.ConnectException: Connection refused
Endi mijoz dasturining boshlang‘ich matnlari haqida. Bizni faqatgina main usuli qiziqtiradi, chunki foydali ishning hammasini u bajaradi.
Darhol mijozda turishga tushgandan keyin main usuli “localhost” IP manzili uchun (bu 127.0.0.1 manzili) 9999 raqami bilan soket yaratishga harakat qiladi.
* Socket Client *
Local Port: 1180
Hello from client Application!
* Hello from client Application! *
qwerty
* qwerty *
Quit
Bizning ko‘rsatgan dasturimiz server bilan bitta kompyuterda ishlamoqda. Shuning uchun maxsus 127.0.0.1 nomerli IP manzilni qo‘llay oldik. Lekin server va mijoz har xil kompmyuterlarda ishlaganda, Soket sinfining birinchi konstruktori sifatida siz InetAddress sinfining ob’ektiga ssыka berib yuborishingiz kerak. Bu ob’ekt server ishlayotgan haqiqiy kompyuterning manziliga ega bo‘lishi kerak.
Domen manzili yoki IP manzilini matnli satr ko‘rinishida ko‘rsatishni qabul qila oladigan Soket sinfining boshqa konstruktorlaridan foydalanish mumkin.
socket tuzish paytida serverga bog‘lanish amalga oshiriladi. Server kutish holatidan chiqib, mijoz tomonidan yuborilayotgan komandalarni tushinishni boshlaydi. Nazorat uchun main vositasi lokal port raqamini olib, konsolda ko‘rsatadi:
int nPort = s.getLocalPort();
System.out.println("Local Port:" + nPort);
Keyin u server bilan ma’lumotlarni ayirboshlash uchun kirish va chiqish oqimlarini tashkil etadi:
InputStream is;
OutputStream os;
try
{
is = s.getInputStream();
os = s.getOutputStream();
. . .
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
Ayirboshlashning o‘zi quyidagi siklda amalga oshiriladi:
String szStr;
while(true)
{
szStr = getKbdString();
sendString(os, szStr);
os.flush();
if(szStr.equals("quit"))
break;
szStr = recvString(is);
System.out.println(szStr);
}
Har bir iteratsiyada main vositasi satrni konsoldan kiritadi (bizning dasturimizda belgilangan getKbdString vositasi bilan.)
Oldingi bobda keltirilgan misollarda ko‘rsatilgan SendString vositasi orqali satr serverga uzatiladi. Javob recvString vositasi (bu ham oldingi misolda ko‘rsatilgan) orqali qabul qilinadi va mijozda turi konsoliga chiqariladi.
Agar foydalanuvchi "Quit" satrini kiritsa sikl o‘z ishin yakunlaydi. Bundan so‘ng main vositasi oqim va soketlarni yopadi:
is.close();
os.close();
s.close();
|
| |