TcpListener - C#

Узнай цену своей работы

Формулировка задачи:

можно примерчик сервера с использованием TcpListener? я не очень понимаю, вот вызвал ты Start, а дальше что? в цикле проверять Pending? а если асинхронно? там есть вроде асинхронные варианты, но я не вижу никаких событий у него, ведь асинхронность обычно связана с событиями которые вызываются например при подключении клиента (например как у Socket.AsyncAccept), а тут нету...
актуально!!!

Решение задачи: «TcpListener»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
 
 
 
namespace learning3
{
    class Server
    {
        byte[]buufer=new byte[1024];
        private TcpListener listener;
 
        public event EventHandler<DataEventArgs> ClientConnecting;
 
        public Server()
        {
          listener = new TcpListener(new IPEndPoint(IPAddress.Any, 6565));
 
            ClientConnecting += Server_ClientConnecting;
            
        }
 
        private async void Server_ClientConnecting(object sender, DataEventArgs e)
        {
            using (var str = e.Client.GetStream())
            {
                int count = await str.ReadAsync(buufer, 0, buufer.Length);
 
                var data = buufer.Take(count).ToArray();
                var ms = Encoding.Default.GetString(data);
 
                Console.WriteLine(ms);
 
 
               
                string res = "We got your massage " + ms;
                await str.WriteAsync(Encoding.Default.GetBytes(res.ToCharArray()),0,res.Length);
            }
        }
 
        public async Task Start()
        {
            listener.Start();
            for(int i=0;i<200;i++)
            {
                TcpClient client = await listener.AcceptTcpClientAsync();
 
                if (ClientConnecting != null)
                {
                    var tmp = ClientConnecting;
                    tmp(this,new DataEventArgs(client));
                }
            }
  
        }
}
 
    class Client
    {
        TcpClient tcp=new TcpClient();
 
        byte[]buffer=new byte[1024];
 
        public Client()
        {
            tcp.Connect("localhost",6565);
 
            using (var stream=tcp.GetStream())
            {
                string s = $"Hello.I am a new client,and my id {Guid.NewGuid()}";
 
                byte[] send = Encoding.Default.GetBytes(s);
                
                stream.Write(send,0,send.Length);
               int length=  stream.Read(buffer, 0, buffer.Length);
 
                Console.BackgroundColor = ConsoleColor.DarkGray;
                Console.WriteLine(Encoding.Default.GetString(buffer.Take(length).ToArray()));
 
                Console.BackgroundColor = ConsoleColor.DarkGreen;
            }
           
        } 
    }
 
    internal class DataEventArgs : EventArgs
    {
        public TcpClient Client { get; private set; }
 
        public DataEventArgs(TcpClient t)
        {
            Client = t;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
           Server ser=new Server();
 
            Task t = ser.Start();
 
            Client[] client = Enumerable.Range(0, 200).Select(i => new Client()).ToArray();
 
            t.Wait();
            Console.ReadKey();
 
        }
        
    }
  
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5