C#TCP客户端和服务器出现问题

C#TCP客户端和服务器出现问题,c#,.net,winforms,C#,.net,Winforms,我正在构建客户端和服务器通信。所以我创建了两个独立的项目。问题是这不起作用 服务器代码: private void Form1_Load(object sender, EventArgs e) { IPAddress ipaddress = IPAddress.Parse("127.0.0.1"); int port = 13000; TcpListener server = new TcpListener(ipaddress, port); server.Sta

我正在构建客户端和服务器通信。所以我创建了两个独立的项目。问题是这不起作用

服务器代码:

private void Form1_Load(object sender, EventArgs e)
{
    IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
    int port = 13000;
    TcpListener server = new TcpListener(ipaddress, port);
    server.Start();
    while (true)
    {
        TcpClient client = server.AcceptTcpClient();
        label1.Text = "That Connected to Server";
    }
}
客户端代码:

private void Form1_Load(object sender, EventArgs e)
{
    IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
    int port = 13000;

    TcpClient obj = new TcpClient(ipaddress.ToString(), port);
    while (true)
    {
        label1.Text = "connected";
    }
}
这段代码在控制台应用程序上运行良好。但不在windows窗体上工作。我正在运行这两个应用程序,但屏幕上没有输出。请帮我修一下


提前感谢

Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。大概是这样的:

private void Form1_Load(object sender, EventArgs e)
{
    _thread = new Thread(ListenerThread);
    _thread.IsBackground = true;
    _thread.Start();
}

private Thread _thread;

private void ListenerThread()
{
    IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
    int port = 13000;
    TcpListener server = new TcpListener(ipaddress, port);
    server.Start();
    while (true)
    {
        TcpClient client = server.AcceptTcpClient();
        BeginInvoke(new MethodInvoker(() => label1.Text = "That Connected to Server"));
    }
}

当然,在UI回调方法上,您需要执行更多的操作(注意lambda和匿名委托,因为捕获的变量可能不是线程安全的)。对客户端也执行同样的操作,您将完成。

Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。大概是这样的:

private void Form1_Load(object sender, EventArgs e)
{
    _thread = new Thread(ListenerThread);
    _thread.IsBackground = true;
    _thread.Start();
}

private Thread _thread;

private void ListenerThread()
{
    IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
    int port = 13000;
    TcpListener server = new TcpListener(ipaddress, port);
    server.Start();
    while (true)
    {
        TcpClient client = server.AcceptTcpClient();
        BeginInvoke(new MethodInvoker(() => label1.Text = "That Connected to Server"));
    }
}

当然,在UI回调方法上,您需要执行更多的操作(注意lambda和匿名委托,因为捕获的变量可能不是线程安全的)。对客户端也执行同样的操作,您将完成。

Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。大概是这样的:

private void Form1_Load(object sender, EventArgs e)
{
    _thread = new Thread(ListenerThread);
    _thread.IsBackground = true;
    _thread.Start();
}

private Thread _thread;

private void ListenerThread()
{
    IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
    int port = 13000;
    TcpListener server = new TcpListener(ipaddress, port);
    server.Start();
    while (true)
    {
        TcpClient client = server.AcceptTcpClient();
        BeginInvoke(new MethodInvoker(() => label1.Text = "That Connected to Server"));
    }
}

当然,在UI回调方法上,您需要执行更多的操作(注意lambda和匿名委托,因为捕获的变量可能不是线程安全的)。对客户端也执行同样的操作,您将完成。

Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。大概是这样的:

private void Form1_Load(object sender, EventArgs e)
{
    _thread = new Thread(ListenerThread);
    _thread.IsBackground = true;
    _thread.Start();
}

private Thread _thread;

private void ListenerThread()
{
    IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
    int port = 13000;
    TcpListener server = new TcpListener(ipaddress, port);
    server.Start();
    while (true)
    {
        TcpClient client = server.AcceptTcpClient();
        BeginInvoke(new MethodInvoker(() => label1.Text = "That Connected to Server"));
    }
}
当然,在UI回调方法上,您需要执行更多的操作(注意lambda和匿名委托,因为捕获的变量可能不是线程安全的)。对客户端也执行同样的操作,您将完成。

Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。Windows应用程序是事件驱动的。如果将
while(true)
循环放入
Form.Load
事件中,则它将永远不会退出该函数(并且您将永远不会看到任何接口)。您必须在单独的线程中运行该代码,然后将
BeginInvoke
结果发送到UI线程。