在TcpClient实例上读取Connected属性时获取异常

时间:2016-06-29 10:31:02

标签: c# tcpclient

public bool IsConnected
{
    get { return _tcpClient == null ? false : _tcpClient.Connected; }
}

抛出一个

  

“对象引用未设置为对象的实例。”

at

  

在System.Net.Sockets.TcpClient.get_Connected()      在C中的Project.ViewModel.ModbusOutputCounter.get_IsConnected():... \ ModbusOutputCounter.cs:第115行

这怎么可能,以及我们如何防止接收此异常?

编辑:

根据svk的问题,问题在于Disposing,它在Close()方法内部调用。解决方法:

return _tcpClient?.Client != null ? _tcpClient.Connected : false;

1 个答案:

答案 0 :(得分:2)

根据reference source for TcpClientConnected直接返回底层套接字的Connected。这意味着当套接字为Connected时,NullReferenceException将抛出null。虽然略读参考源,但我发现了两种情况:

  1. TcpClientDispose d。
  2. 当您明确将Client Socket设置为null