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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д