参数传递一个 TCPClient 对象
Parameter Pass a TCPClient Object
我有一个方法来处理客户端数据。我目前有这个:
private void HandleClientData(TcpClient c)
{
byte[] bytes = new byte[256];
string data = null;
TcpClient client = c;
c.Close();
client.ReceiveTimeout = 10000;
}
现在,即使使用 c
.
创建了新的 TcpClient
,行:TcpClient client = c;
是否会导致客户端丢失
我在某处读到所有引用都共享一个底层 socket
,但是,像这样重新初始化它允许用户仍然通过发送数据或者行:c.Close();
完全结束连接?
请注意:我目前没有自己测试的代码,因为它还没有写,这个问题也将帮助我了解更多 TcpClient
在进一步的项目中处理.谢谢
TcpClient client = c;
这一行并没有创建 c
的副本,它是对 c
相同内容的新引用。仍然只有 1 个 TcpClient 实例。
因此,当您这样做时:
c.Close();
它关闭了对 c
的引用(因此 client
也关闭了,因为它们是同一件事)。
它们不只是共享相同的 'socket',它们是完全相同的东西,只是有两个不同的变量名。
我有一个方法来处理客户端数据。我目前有这个:
private void HandleClientData(TcpClient c)
{
byte[] bytes = new byte[256];
string data = null;
TcpClient client = c;
c.Close();
client.ReceiveTimeout = 10000;
}
现在,即使使用 c
.
TcpClient
,行:TcpClient client = c;
是否会导致客户端丢失
我在某处读到所有引用都共享一个底层 socket
,但是,像这样重新初始化它允许用户仍然通过发送数据或者行:c.Close();
完全结束连接?
请注意:我目前没有自己测试的代码,因为它还没有写,这个问题也将帮助我了解更多 TcpClient
在进一步的项目中处理.谢谢
TcpClient client = c;
这一行并没有创建 c
的副本,它是对 c
相同内容的新引用。仍然只有 1 个 TcpClient 实例。
因此,当您这样做时:
c.Close();
它关闭了对 c
的引用(因此 client
也关闭了,因为它们是同一件事)。
它们不只是共享相同的 'socket',它们是完全相同的东西,只是有两个不同的变量名。