Soketlar Soket sinfi


TCP soketlarida mijoz-server dasturi



Download 69,34 Kb.
bet3/3
Sana04.02.2022
Hajmi69,34 Kb.
#431133
1   2   3
Bog'liq
Soketlar

TCP soketlarida mijoz-server dasturi.
Soketlardan foydalanib TCP-serverni qanday yaratishni ko'rib chiqamiz. TCP server soketining umumiy sxemasi quyidagicha bo'ladi:

Server dasturining 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'rovlarni qabul qilish uchun port
static void Main(string[] args)
{
// soketni ishga tushirish uchun manzillarni olamiz
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
// soketni yaratamiz
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// soketni biz ma'lumot oladigan mahalliy nuqta bilan ulaymiz
listenSocket.Bind(ipPoint);
// qabul qilishni boshlash
listenSocket.Listen(10);
Console.WriteLine("Server ishlaydi. Ulanish kutilmoqda ...");
while (true)
{
Socket handler = listenSocket.Accept();
// biz xabar olamiz
StringBuilder builder = new StringBuilder();
int bytes = 0; // olingan baytlar soni
byte[] data = new byte[256]; // olingan ma'lumotlar 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());
// javob yuboramiz
string message = " xabaringiz yetkazildi ";
data = Encoding.Unicode.GetBytes(message);
handler.Send(data);
// soketni yopamiz
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Birinchidan, soket yaratgandan so'ng, uni Bind usuli yordamida mahalliy nuqta bilan bog'laymiz:
listenSocket.Bind(ipPoint);
Soket 8007 portidagi ulanishlarni mahalliy 127.0.0.1 manzilida tinglaydi. Ya'ni, mijoz mahalliy manzil va 8005 portiga ulanishi kerak bo'ladi.
Keyin qabul qilishni boshlaymiz:
listenSocket.Listen(10);
Listen usuli faqat Bind usulidan keyin chaqiriladi. Parametr sifatida soketda navbatga qo'yilishi mumkin bo'lgan kiruvchi ulanishlar soni olinadi.
Listen usulini chaqirgandan so'ng kiruvchi ulanishlarni tinglash boshlanadi va agar ulanishlar soketga tushsa, ularni Accept usuli yordamida olish mumkin:
Socket handler = listenSocket.Accept();
Accept usuli kutilayotgan so'rovlar qatoridan birinchi so'rovni oladi va uni qayta ishlash uchun Socket ob'ektini yaratadi. Agar so'rov navbati bo'sh bo'lsa, u holda Qabul qilish usuli yangi ulanish o'rnatilguncha chaqiruv oqimini bloklaydi.
So'rovni bajarish uchun avval do..while tsiklida biz ma'lumotlarni Receive usuli yordamida qabul qilamiz:
do
{
bytes = handler.Receive(data);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (handler.Available > 0);
Receive usuli parametr sifatida qabul qilingan ma'lumotlar o'qiladigan baytlar qatorini oladi va olingan baytlar sonini qaytaradi.
Agar o'qish uchun ma'lumotlar mavjud bo'lmasa, Socket.ReceiveTimeout ob'ekti yordamida vaqt tugashi qiymati belgilanmagan bo'lsa, Receive usuli ma'lumotlar mavjud bo'lguncha chaqiruv oqimini bloklaydi. Vaqt tugashidan oshib ketgan bo'lsa, Receive ob'ekti SocketExceptionni tashlaydi. Oqimdagi ma'lumotlarning mavjudligini kuzatish uchun Available xususiyati ishlatiladi.
Ma'lumotlarni olgandan so'ng, Send usuli yordamida mijozga javob xabari yuboriladi, bu parametr sifatida baytlar qatorini oladi:
handler.Send(data);
So'rovni qayta ishlash oxirida siz u bilan bog'langan soketni yopishingiz kerak:
handler.Shutdown(SocketShutdown.Both);
handler.Close();
Soketni yopishdan oldin Shutdown () usulini chaqirish xom ma'lumotlar qolmasligini ta'minlaydi. Ushbu usul parametr sifatida SocketShutdown ro'yxatidan qiymat oladi:

  • Both: soketga ma'lumotlarni yuborishni ham, qabul qilishni ham to'xtatish

  • Receive: ma'lumot olishni to'xtatish

  • Send: ma'lumotlar yuborishni to'xtatish

Mijoz
Endi mijoz uchun loyihani qo'shaylik. Mijozning soketlarda ishlashining umumiy sxemasi biroz boshqacha bo'ladi:

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 adresi
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 xostga ulanish
socket.Connect(ipPoint);
Console.Write("Habarni kiriting:");
string message = Console.ReadLine();
byte[] data = Encoding.Unicode.GetBytes(message);
socket.Send(data);
// Javobni qabul qilish
data = new byte[256]; // javob buferi
StringBuilder builder = new StringBuilder();
int bytes = 0; // olingan 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());
// soketni yopamiz
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
}
Mijoz uchun hamma narsa bir xil, faqat endi, soket yaratilgandan so'ng, server manzili o'tkaziladigan Connect() usuli chaqiriladi:
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
socket.Connect(ipPoint);

Endi server va mijoz dasturlarini boshlaymiz. Mijoz konsolida:


Xabaringizni kiriting: salom dunyo
server javobi: sizning xabaringiz etkazib berildi

Server konsol:


Server ishlaydi. Ulanish kutilmoqda ...
22:34: salom dunyo


UDP uchun soketlardan foydalanish
UDP doimiy ulanishni talab qilmaydi va ko'pchilik UDP bilan ishlashni TCP ga qaraganda osonroq deb bilishi mumkin. UDP bilan ishlash printsiplarining aksariyati TCP bilan bir xil.
Birinchidan, soket yaratiladi:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);



Download 69,34 Kb.

Do'stlaringiz bilan baham:
1   2   3




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