Mavzu: Soketlar


II.TCP soketlarida mijoz-server dasturi



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

II.TCP soketlarida mijoz-server dasturi
Rozetkalar yordamida TCP serverini qanday yaratishni ko'rib chiqamiz. TCP server soketining umumiy ishlash sxemasi quyidagicha bo'ladi:

Rozetka yaratish

Ulanishlarni tinglash uchun mahalliy hotspotni yaratish(Bind usuli)




Kiruvchi ulanishlarni tinglashni boshlang(Listen usuli)












Kiruvchi ulanishni olish(Accept usuli)


Jo’natish/ma’lumotlarni yig’ish(Send /Reseive metodi)



Yopish rozetkasi(Close usuli)


Server dasturi kodi quyidagicha bo'ladi:


using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SocketTcpServer
{
class Program
{
static int port = 8005;//kiruvchi so’zlarni qabul qilish porti
static void Main(string[] args)
{
//rozetkani ishga tushirish uchun manzillarni olish
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
//rozetka yaratish
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
//rozetkani ma’lumotlarni qabul qiladigan mahalliy nuqtaga ulash
listenSocket.Bind(ipPoint);
//tinglashni boshlash
listenSocket.Listen(10);
Console.WriteLine("Server ishlayapti.Ulanishlar kutilmoqda...");
while (true)
{
Socket handler = listenSocket.Accept();
//Xabarni olamiz
StringBuilder builder = new StringBuilder();
int bytes = 0; //qabul qilingan baytlar soni
byte[] data = new byte[256]; //qabul qilish uchun bufer
do
{
bytes = handler.Receive(data);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (handler.Available>0);
Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
string message = "Sizning xabaringiz yetkazildi";
data = Encoding.Unicode.GetBytes(message);
handler.Send(data);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}

Birinchidan, rozetkani yaratgandan so'ng, foydalanuvchi uni Bind usuli yordamida mahalliy nuqtaga bog'laydi:


listenSocket.Bind(ipPoint);
Soket 127.0.0.1 mahalliy manzilidagi 8005 portidagi ulanishlarni tinglaydi. Ya'ni, mijoz mahalliy manzilga va 8005 portiga ulanishi kerak bo'ladi.
Keyin biz tinglashni boshlaymiz:
listenSocket.Listen(10);
Listen usuli faqat Bind usulidan keyin chaqiriladi. Parametr sifatida rozetkada navbatda turishi mumkin bo'lgan kiruvchi ulanishlar sonini oladi.
Listen usulini chaqirgandan so'ng, kiruvchi ulanishlarni tinglash boshlanadi va agar ulanishlar rozetkaga kelsa, ularni Accept usuli yordamida olish mumkin:
Socket handler=listenSocket.Accept();
Qabul qilish usuli kutilayotgan so'rovlar qatoridan birinchi so'rovni chiqaradi va uni qayta ishlash uchun Socket yaratadi. Agar so'rov navbati bo'sh bo'lsa, Accept usuli yangi ulanish o'rnatilgunga qadar chaqiruvchi ipni bloklaydi.
So'rovni qayta ishlash uchun birinchi navbatda do..while siklida foydalanuvchi Receive usuli yordamida ma'lumotlarni oladi:
do
{
bytes = handler.Receive(data);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (handler.Available > 0);
Qabul qilish usuli parametr sifatida qabul qilingan ma'lumotlar o'qiladigan baytlar massivini oladi va olingan baytlar sonini qaytaradi.
Agar o'qilishi mumkin bo'lgan ma'lumotlar bo'lmasa, Socket.ReceiveTimeout ob'ekti yordamida kutish vaqti qiymati o'rnatilmagan bo'lsa, Receive usuli qo'ng'iroq qiluvchi oqimni ma'lumotlar mavjud bo'lguncha bloklaydi. Agar kutish vaqti oshib ketgan bo'lsa, Receive obyekti SocketException ni chiqaradi. Oqimdagi ma'lumotlar mavjudligini kuzatish uchun Available xususiyatidan foydalaniladi .
Ma'lumotni olgandan so'ng, mijozga parametr sifatida baytlar massivini oladigan Send usuli yordamida javob xabari yuboriladi:
handler.Send(data);
So'rovni qayta ishlash oxirida siz u bilan bog'liq rozetkani yopishingiz kerak:
handler.Shutdown(SocketShutdown.Both);
handler.Close();
Rozetkani yopishdan oldin O'chirish () usulini chaqirish hech qanday ham ma'lumot qolmasligini ta'minlaydi. Ushbu usul parametr sifatida SocketShutdown ro'yxatidan qiymat oladi :

  • Both: rozetkada ma'lumotlarni yuborish va qabul qilishni to'xtatish

  • Receive: ma'lumotlarni olishni to'xtatish

  • Send: ma'lumotlarni yuborishni to'xtatish

Mijoz
Endi mijoz uchun loyiha qo'shamiz. Mijozning rozetkalardagi ishining umumiy sxemasi biroz boshqacha bo'ladi:

Rozetka yaratish

Server ulanishi(Connect metodi)



Jo’natish/ma’lumotlarni yig’ish((Send /Reseive metodi)



Yopish rozetkasi(Close usuli)


To'liq mijoz kodi:


using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SocketTCPClient
{
class Program
{
//biz ulanadigan serverning manzili va porti
static int port = 8005; //server porti
static string address = "127.0.0.1"; //server manzili
static void Main(string[] args)
{
try
{
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//masofaviy hostga ulaning
socket.Connect(ipPoint);
Console.Write("Xabaringizni kiriting:");
string message = Console.ReadLine();
byte[] data = Encoding.Unicode.GetBytes(message);
socket.Send(data)
//javobini olamiz
data = new byte[256]; //javob buferi
StringBuilder builder = new StringBuilder();
int bytes = 0; //qabul qilingan baytlar soni
do
{
bytes = socket.Receive(data, data.Length, 0);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (socket.Available > 0);
Console.WriteLine("Server javobi: " + builder.ToString());
//rozetkani yopish
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
}
Mijoz uchun hamma narsa bir xil, faqat hozir rozetkani yaratgandan so'ng , server manzili uzatiladigan Connect () usuli chaqiriladi :
IPEndPoint ipPoint = new
IPEndPoint(IPAddress.Parse(address), port);
socket.Connect(ipPoint);
Endi server va mijoz dasturlarini ishga tushiramiz. Mijoz konsoli:
Xabaringizni kiriting:salom dunyo
Server javobi:xabaringiz yetkazildi
Server konsoli:
Server ishlayapti.Ulanishlar kutilmoqda...
22:34 :salom dunyo


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