如何在 tcplistener.accepttcpclient 上发起事件

How to raise an event on tcplistener.accepttcpclient

我现在正在设计一个Tcp Server。我想在客户端连接到我的服务器时触发一个事件。怎么办?

public class Server
{
    private TcpListener _server;
    private bool _isServerWorking = false;
    private TcpClient _client;

    public Server(string host, int port)
    {
        var ipAddress = IPAddress.Parse(host);
        _server = new TcpListener(ipAddress, port);
    }

    public async Task StartAsync()
    {
        _server.Start();
        _isServerWorking = true;
        while(_isServerWorking)
        {
            _client = await _server.AcceptTcpClientAsync();
            ServerConnectedEventArgs args = new ServerConnectedEventArgs(_client);
            OnServerConnected(args);
            ThreadPool.QueueUserWorkItem(ConnectClientsThredProc, _client);
        }
    }

    public void Stop()
    {
        _isServerWorking = false;
        _server.Stop();
    }


    private static void ConnectClientsThredProc(object obj)
    {
        var client = (TcpClient)obj;
    }



    public event ServerConnectedEventHandler ServerConnectedEvent;
    private void OnServerConnected(ServerConnectedEventArgs e)
    {
        ServerConnectedEvent(this, e);
    }

}

终于,我找到了解决办法。收到客户端连接后,我将引发事件。这是事件数据和事件委托。

public class ServerConnectedEventArgs: EventArgs
{
    public TcpClient Client { set; get; }
    public ServerConnectedEventArgs(TcpClient client)
    {
        Client = client;
    }
}

public delegate void ServerConnectedEventHandler(object sender, ServerConnectedEventArgs e);