Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写入TcpClient client=list.AcceptTcpClient()后,程序未打开;_C#_Sockets_Network Programming - Fatal编程技术网

C# 写入TcpClient client=list.AcceptTcpClient()后,程序未打开;

C# 写入TcpClient client=list.AcceptTcpClient()后,程序未打开;,c#,sockets,network-programming,C#,Sockets,Network Programming,我必须在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 c

我必须在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地址

任何建议请接受TcpClient()

是一种阻止方法。如果您从
Load
事件处理程序调用它(它本身在UI线程中调用),您将阻止应该处理用户界面的线程。在客户端实际尝试连接并返回
acceptcClient()
方法之前,程序中不会发生任何事情

您可以使用该方法的异步版本修复此问题。例如:

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\u Load()
方法在调用
AcceptTcpClientAsync()
方法时返回,从而允许UI线程继续工作。如果客户端确实连接,将继续执行
Form1\u Load()
方法,将接受操作的结果复制到
client
变量中,然后执行下一条语句(即更新
label5.Text


当然,就目前的代码而言,您似乎没有对已接受的
TcpClient
执行任何操作(除了报告其IP/端口信息)。您可能打算添加更多代码来处理实际的客户端连接。当你这样做的时候,请始终记住上述内容;您需要始终保持UI线程自由运行,使用
async
/
wait
习惯用法是最好的方法。

好的,LocalEndPoint就是本地端点。您可能需要远程端点。看起来代码是从某个地方复制的。是的,正是从我的visual studio复制的。我的windows窗体在写入list.Start()后被冻结;TcpClient client=list.AcceptTcpClient();谢谢你的帮助,先生