События сокета C#

#c# #sockets

Вопрос:

Можно ли создать обработчик событий, который запускается, когда сокет получает новые данные, аналогично

*_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

метод, доступный с последовательными портами?

Комментарии:

1. Да, найдите сервер асинхронных сокетов, и вы найдете множество примеров.

Ответ №1:

ДА.

Взгляните на SuperSimpleTcp.

Он может даже делать то, что вы хотите, из коробки.

 void Main(string[] args)
{
  // instantiate
  SimpleTcpServer server = new SimpleTcpServer("127.0.0.1:9000");

  // set events
  server.Events.ClientConnected  = ClientConnected;
  server.Events.ClientDisconnected  = ClientDisconnected;
  server.Events.DataReceived  = DataReceived;

  // let's go!
  server.Start();

  // once a client has connected...
  server.Send("[ClientIp:Port]", "Hello, world!");
  Console.ReadKey();
}

static void ClientConnected(object sender, ClientConnectedEventArgs e)
{
  Console.WriteLine("["   e.IpPort   "] client connected");
}

static void ClientDisconnected(object sender, ClientDisconnectedEventArgs e)
{
  Console.WriteLine("["   e.IpPort   "] client disconnected: "   e.Reason.ToString());
}

static void DataReceived(object sender, DataReceivedEventArgs e)
{
  Console.WriteLine("["   e.IpPort   "]: "   
     Encoding.UTF8.GetString(e.Data));
}