-2
我現在正在設計一個Tcp服務器。我想在客戶端連接到我的服務器時觸發事件。怎麼做?如何在tcplistener.accepttcpclient上提出事件
我現在正在設計一個Tcp服務器。我想在客戶端連接到我的服務器時觸發事件。怎麼做?如何在tcplistener.accepttcpclient上提出事件
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);
您的問題目前太寬泛,無法回答。我們不知道你已經嘗試了什麼,提高事件的哪個方面會給你帶來問題等等。你是否理解C#中的事件是如何工作的?你有TCP服務器已經接受客戶端?什麼阻止你在AcceptTcpClient返回的地方發起事件? –
我正在設計一個Tcp服務器。當客戶端連接到我的服務器時,我只想提出一個事件。它可以完成或不完成? –
是的,絕對。當AcceptTcpClient返回時,請引發一個事件。再說一遍 - 什麼阻止你實現這一點?你是否研究過如何在C#中引發事件? –