gpt4 book ai didi

c# - 编写TcpClient client = list.AcceptTcpClient();后程序无法打开。

转载 作者:行者123 更新时间:2023-12-03 12:04:37 24 4
gpt4 key购买 nike

我必须在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变量中,然后执行下一条语句(即,更新 label5.Text)。

当然,就目前的代码而言,您似乎对接受的 TcpClient没有做任何事情(除了报告其IP/端口信息)。大概您打算添加更多代码来处理实际的客户端连接。在执行操作时,请始终牢记以上几点;您需要始终保持UI线程自由运行,并且使用 async/ await惯用法是做到这一点的最佳方法。

关于c# - 编写TcpClient client = list.AcceptTcpClient();后程序无法打开。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33583114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com