2016-01-07 55 views
-2

我現在正在設計一個Tcp服務器。我想在客戶端連接到我的服務器時觸發事件。怎麼做?如何在tcplistener.accepttcpclient上提出事件

+0

您的問題目前太寬泛,無法回答。我們不知道你已經嘗試了什麼,提高事件的哪個方面會給你帶來問題等等。你是否理解C#中的事件是如何工作的?你有TCP服務器已經接受客戶端?什麼阻止你在AcceptTcpClient返回的地方發起事件? –

+0

我正在設計一個Tcp服務器。當客戶端連接到我的服務器時,我只想提出一個事件。它可以完成或不完成? –

+0

是的,絕對。當AcceptTcpClient返回時,請引發一個事件。再說一遍 - 什麼阻止你實現這一點?你是否研究過如何在C#中引發事件? –

回答

2
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);