我必须在Windows的标签上显示客户端ip地址,这是我编写的代码
private void Form1_Load(object sender, EventArgs e)
{
IPEndPoint end = new IPEndPoint(IPAddress.Any, 8000);
TcpListener list = new TcpListener(end);
list.Start();
TcpClient client = list.AcceptTcpClient();
label5.Text = client.Client.LocalEndPoint.ToString();
}
当我在TcpClient client = list.AcceptTcpClient()上发表评论时,我的程序启动了,但绝对不会显示客户端的IP地址
有什么建议吗
AcceptTcpClient()
是一种阻止方法。如果从Load
事件处理程序调用该事件处理程序(该事件处理程序本身在UI线程中调用),则将阻塞应该处理用户界面的线程。直到客户端实际尝试连接并且AcceptTcpClient()
方法返回之前,程序中什么都不会发生。
您可以通过使用方法的异步版本来解决此问题。例如:
private async void Form1_Load(object sender, EventArgs e)
{
IPEndPoint end = new IPEndPoint(IPAddress.Any, 8000);
TcpListener list = new TcpListener(end);
list.Start();
TcpClient client = await list.AcceptTcpClientAsync();
label5.Text = client.Client.LocalEndPoint.ToString();
}
这将使方法在调用Form1_Load()
方法时返回AcceptTcpClientAsync()
,从而允许UI线程继续工作。如果以及当客户端确实连接时,您的Form1_Load()
方法将继续执行,将accept操作的结果复制到client
变量中,然后执行下一条语句(即update label5.Text
)。
当然,就目前的代码而言,您似乎没有对接受的内容做任何事情TcpClient
(除了报告其IP /端口信息之外)。大概您打算添加更多代码来处理实际的客户端连接。在执行操作时,请始终牢记以上几点;您需要始终保持UI线程自由运行,而使用async
/await
惯用语是做到这一点的最佳方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句