Tcp soketlarida mijoz-server dasturi



Yüklə 64,48 Kb.
səhifə1/2
tarix24.06.2022
ölçüsü64,48 Kb.
#62228
  1   2
TCP soketlarida mijoz-server dasturi


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 oling
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
// soket yaratish
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// soketni biz ma'lumot oladigan lokal nuqtaga ulash.
listenSocket.Bind(ipPoint);
// tinglashni boshlang
listenSocket.Listen(10);
Console.WriteLine("Server ishga tushdi. Ulanish kutilmoqda ...");
while (true)
{
Socket handler = listenSocket.Accept();
// habarni qabul qilish
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 jo`natish
string message = " xabaringiz yetkazildi ";
data = Encoding.Unicode.GetBytes(message);
handler.Send(data);
// soketni yopish
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Birinchidan, soketni yaratgandan so'ng, uni Bind usuli yordamida mahalliy nuqtaga 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 tinglashni 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 hosil qiladi. Agar so'rov navbati bo'sh bo'lsa, u holda Accept usuli yangi ulanish o'rnatilguncha chaqiruv satrini bloklaydi.
So'rovni qayta ishlash uchun avval do..while tsiklida biz Receive usuli yordamida ma'lumotlarni olamiz:
do
{
bytes = handler.Receive(data);
builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
}
while (handler.Available > 0);
Receive usuli parametr sifatida qabul qilingan ma'lumotlarni o'qish uchun baytlar qatorini oladi va olingan baytlar sonini qaytaradi.
Agar o'qiladigan ma'lumotlar bo'lmasa, Receive usuli, agar Socket.ReceiveTimeout ob'ekti yordamida vaqt tugashi qiymati belgilanmagan bo'lsa, ma'lumotlar mavjud bo'lguncha chaqiruv oqimini bloklaydi. Agar kutish vaqti tugagan bo'lsa, Receive ob'ekti SocketExceptionni tashlaydi. Oqimdagi ma'lumotlarning mavjudligini kuzatish uchun Available xususiyatidan foydalaning.
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:

Yüklə 64,48 Kb.

Dostları ilə paylaş:
  1   2




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin