|
O‘zbekiston
|
bet | 7/11 | Sana | 16.05.2024 | Hajmi | 0,59 Mb. | | #238978 |
Bog'liq Nabijonov Asliddining kurs ishi
TcpClient mijozi va TcpListener serveri o'rtasidagi bir yo'nalishli aloqani ko'rib chiqaylik, bunda server ma'lumotlarni jo'natadi va mijoz qabul qiladi yoki aksincha, mijoz ma'lumotlarni yuboradi va server oladi. Aslida, xuddi shu misollar, avvalgi maqoladagi rozetkalardagi kabi, faqat TcpListener va TcpClient-dan foydalangan holda ko'rib chiqiladi.
Mijozga ma'lumotlarni yuborish Birinchidan, server ma'lumotlarni yuboradigan va mijoz faqat qabul qiladigan vaziyatni ko'rib chiqaylik. Shunday qilib, server uchun quyidagi kodni aniqlaymiz:
using System.Net;
using System.Net.Sockets;
using System.Text;
var tcpListener = new TcpListener(IPAddress.Any, 8888);
try
{
tcpListener.Start(); // запускаем сервер
Console.WriteLine("Сервер запущен. Ожидание подключений... ");
while (true)
{
// получаем подключение в виде TcpClient
using var tcpClient = await tcpListener.AcceptTcpClientAsync();
// получаем объект NetworkStream для взаимодействия с клиентом
var stream = tcpClient.GetStream();
// определяем данные для отправки - отправляем текущее время
byte[] data = Encoding.UTF8.GetBytes(DateTime.Now.ToLongTimeString());
// отправляем данные
await stream.WriteAsync(data);
Console.WriteLine($"Клиенту {tcpClient.Client.RemoteEndPoint} отправлены данные");
}
}
finally
{
tcpListener.Stop();
Misol tariqasida, biz shunchaki joriy vaqtni mijozga hh:mm:ss formatida yuboramiz. Buning uchun satrni baytlar massiviga aylantiramiz va ularni stream.WriteAsync() usuli yordamida jo'natamiz. Va biz server konsolida diagnostika xabarini ko'rsatamiz. Mijoz tomonida biz quyidagi kodni aniqlaymiz:
using System.Net.Sockets;
using System.Text;
using TcpClient tcpClient = new TcpClient();
await tcpClient.ConnectAsync("127.0.0.1", 8888);
// буфер для считывания данных
byte[] data = new byte[512];
// получаем NetworkStream для взаимодействия с сервером
var stream = tcpClient.GetStream();
// получаем данные из потока
int bytes = await stream.ReadAsync(data);
// получаем отправленное время
string time = Encoding.UTF8.GetString(data, 0, bytes);
Console.WriteLine($"Текущее время: {time}");
M ijoz tomonida biz bilamizki, server sanani satr sifatida yuboradi va uni o'qish uchun biz buferni aniqlaymiz - 512 baytlik massiv. Usul yordamida stream.ReadAsync() biz oqimdan ma'lumotlarni o'qiymiz, baytlarni satrga aylantiramiz va uni konsolga chiqaramiz. Server va mijozni ishga tushiramiz. Serverga murojaat qilganda, mijoz joriy vaqtni oladi:
|
| |