C# TCP 客户端和服务器遇到问题

本文关键字:遇到 问题 服务器 TCP 客户端 | 更新日期: 2023-09-27 17:56:48

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

服务器代码:

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";
    }
}

此代码在控制台应用程序上工作正常。但不在窗口窗体上工作。我正在运行这两个应用程序,但屏幕上没有输出。请帮我如何解决它。

提前致谢

C# TCP 客户端和服务器遇到问题

Windows 应用程序是事件驱动的。如果您在Form.Load事件中放置一个while(true)循环,那么它永远不会退出该函数(并且您永远不会看到任何接口)。必须在单独的线程中运行该代码,然后将结果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 和匿名委托,因为捕获的变量可能不是线程安全的)。也为客户做同样的事情,你就完成了。