TcpClient.Dispose()是否关闭了TcpClient.GetStream?

时间:2015-12-24 10:31:04

标签: c# sockets

要关闭TcpClient,必须关闭流。通常的做法是:

        client.GetStream().Close();
        client.Close();

所以单独使用client.Close()是不够的,我的问题是client.Dispose()是否与client.GetStream().Close()相同,所以结束就像

        client.Dispose();
        client.Close();

这是我从阅读TcpClient reference source时所理解的,因为Dispose方法关闭了流,所以我是正确的还是我错过了什么?先谢谢你。

2 个答案:

答案 0 :(得分:7)

Close来电DisposeDispose处理流:

IDisposable dataStream = m_DataStream;
if (dataStream != null)
{
    dataStream.Dispose();
}

您不需要同时拨打CloseDispose。选择一个。

您可以查看source code

IDisposable类通常使用另一种与Dispose相同的方法,但使用不同的特定于域的名称,这是很常见的。通常IDisposable.Dispose是明确实施的,因此using语句或演员表可以使用private void VegeListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { // If selected index is -1 (no selection) do nothing if (VegeListBox.SelectedIndex == -1) return; //Make the selected item in the VegeListBox an instance of a Vegetable Vegetable selectedVege = (sender as ListBox).SelectedItem as Vegetable; // Navigate to the new page if (selectedVege != null) { //Navigate to the Carrot page sending the ID property of the selectedVege as a parameter query NavigationService.Navigate(new Uri(string.Format("/Carrot.xaml?parameter={0}", selectedVege.ID), UriKind.Relative)); } // Reset selected index to -1 (no selection) VegeListBox.SelectedIndex = -1; } ,但不会使班级混乱。接口

答案 1 :(得分:0)

client.Dispose

client.Close 

做同样的事情。一个电话就足够了

两者都关闭网络流

来自MSDN

  

调用此方法最终将导致关联的Socket关闭,并且还将关闭用于发送和接收数据的相关NetworkStream(如果已创建)。