【问题标题】:Parameter Pass a TCPClient Object参数传递一个 TCPClient 对象
【发布时间】:2020-07-08 04:31:54
【问题描述】:

我有一个方法来处理客户端数据。我目前有这个:

private void HandleClientData(TcpClient c)
        {
            byte[] bytes = new byte[256];
            string data = null;

            TcpClient client = c;
            c.Close();

            client.ReceiveTimeout = 10000;

        }

现在,TcpClient client = c; 这行是否会导致客户端丢失,即使使用c 创建新的TcpClient

我在某处读到所有引用都共享一个底层socket,但是,像这样重新初始化它是否允许用户仍然通过它发送数据,或者行:c.Close(); 是否会完全结束连接?

请注意:我目前没有自己测试的代码,因为它还没有写出来,这个问题也将帮助我了解更多TcpClient 在进一步项目中的处理。谢谢。

【问题讨论】:

    标签: c# tcp tcpclient


    【解决方案1】:
    TcpClient client = c;
    

    这一行不会创建c 的副本,它是对c 的新引用。仍然只有 1 个 TcpClient 实例。

    因此,当你这样做时:

    c.Close();
    

    它关闭了对c 的引用(因此client 也关闭了,因为它们是同一事物)。

    它们不只是共享同一个“套接字”,它们是完全相同的东西,有两个不同的变量名。

    【讨论】:

    • 你知道解决这个问题的方法吗?也 ty 用于响应。同样,我提到套接字的原因是因为我在此之前读过一些东西。
    • 您为什么要“解决这个问题”。这就是语言和网络的工作方式。你读过什么让你有这样的想法?
    • 我意识到...问题是我将如何处理多个连接...在处理数据之前我只能异步执行吗?
    • 如果你的程序是服务器,每次从客户端建立连接时,你都会得到一个新的 TcpClient 实例。这是套接字的表示形式,在连接关闭之前将一直存在于内存中。
    • TcpListener 是我用来掌握 TCP Stuff 的。从代码示例看来,任何入站连接都将等待其余代码执行。你指的是这个吗?
    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多