Server qismi
TCP-serverni amalga oshirish uchun sizga ikkita sinf TcpListener (ma'lum bir portni tinglash va mijoz ulanishlarini boshqarish uchun) va TcpClient (ulangan mijozlar bilan ma'lumotlar almashinuvi uchun) kerak bo'ladi.
TcpListenet sinfi uchun konstruktor ikkita parametrni oladi, IP-manzil va port raqami.
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
int port = 8888;
TcpListener server = new TcpListener(localAddr, port);
Shuni esda tutingki, TcpClient-dan farqli o'laroq, bu erda IP-manzillar System.Net nom maydonidan IPAddress sinfining ob'ekti bilan ifodalanadi.
Server Start usuli yordamida ishga tushirildi.
server.Start();
Start usulini chaqirgandan so'ng, TcpListener ob'ekti mijozning ulanishini kutadigan cheksiz tsikl ishga tushiriladi va u AcceptTcpClient usuli yordamida amalga oshishi bilanoq TcpClient ob'ekti yaratiladi, bu esa ulangan mijoz bilan ma'lumotlar almashinuvini ta'minlaydi. mijoz qismi uchun tavsiflanganidek.
TcpClient client = server.AcceptTcpClient();
Quyida mijozlardan mag'lubiyatga oid xabarlarni qabul qiladigan va ularga javoblarni mag'lubiyatga yuboradigan TCP-serverni amalga oshirishning to'liq namunasi keltirilgan.
// Server parametrini o`rnatish
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
int port = 8888;
TcpListener server = new TcpListener(localAddr, port);
// serverni ishga tushirish
server.Start();
// chekzis takrorlanish
while (true)
{
try
{
// Cliyentga ulanish
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
// ma’lumot almashish
try
{
if (stream.CanRead)
{
byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = stream.Read(myReadBuffer, 0, myReadBuffer.Length);
myCompleteMessage.AppendFormat("{0}", Encoding.UTF8.GetString(myReadBuffer, 0, numberOfBytesRead));
}
while (stream.DataAvailable);
Byte[] responseData = Encoding.UTF8.GetBytes("Muvafaqqiyatli amalga oshirildi!");
stream.Write(responseData, 0, responseData.Length);
}
}
finally
{
stream.Close();
client.Close();
}
}
catch
{
server.Stop();
break;
}
}
E'tibor bering, mijoz tomonidan farqli o'laroq, server avval kiruvchi xabarni qabul qiladi va shundan keyingina javob yuboradi (harakatlarning teskari tartibi).
Shuni ham ta'kidlash kerakki, istisno holatida, server to'xtab qoladi va cheksiz sikl tugaydi, shunda juda muhim xatolik yuz berganda dastur "osilib qolmaydi".
Tarmoq va dastur bilan ishlash
Tarmoq orqali aloqa juda ko'p vaqt talab qilishi mumkin. O'z navbatida, mijozning serverga ulanishini kutish umuman abadiy davom etishi mumkin. Bularning barchasi dasturga kirish imkoni bo'lmasligiga olib kelishi mumkin ("osib qo'yish").
Bunga yo'l qo'ymaslik uchun mehmonxona oqimida tarmoq bilan ishlash qat'iyan tavsiya etiladi.
Do'stlaringiz bilan baham: |