很诡异的问题。请看下面的tcp异步连接代码
=================================
TcpClient client = new TcpClient();
client.BeginConnect(myIPaddress, port, new AsyncCallback(ConnectCallback), client);
public void ConnectCallback (IAsyncResult result)
{
TcpClient client = (TcpClient)result.AsyncState;
client.EndConnect(result);
//进入回调后在远程的主机根本没有打开情况下,判断connected属性的时候会是true。
//在远程主机端口没开放的情况下,我把tcp连接这个模块单拿出来测,
//走到这一步connected属性的时候会是false.难道是我主程序调用的问题吗?但我的程序怎么会影响到tcp连接呢?我要连接的远程端口明明没有开放。我也用netstat -a 命令查看了。求指教!非常非常困惑~如能解答不胜感激。我就91个园豆了,全拿出来,以表诚意!(系统不让我设置91个园豆,最多80,不知道为什么)
if(client.Connected)
{
//todo something
}
}
没有连接上Connected这个状态一般应该是false,不过这个状态没有收发数据的时候不准,不要太依赖于这个属性。
另外,你的代码有问题,没有使用EndConnect,用上后如果连接不上应该会抛异常的,把你的代码改成这样试试。
public void ConnectCallback(IAsyncResult result) { TcpClient client = (TcpClient)result.AsyncState; client.EndConnect(result); //加上这一句,如果无法连接会抛异常的 Console.WriteLine(client.Connected); if (client.Connected) { //todo something } }
先谢谢您的热心解答。是在提问的时候疏忽了。在我的程序里是有这个client.EndConnect(result)语句的。还有其他可能吗?默认的connected属性为false,没有连接远程主机的情况下,为什么会变成true呢?
@嘟嘟耕:
EndConnect没有抛异常那就是连接上了,你检查下目标主机是否真的无法连接吧。用第三方工具如telnet命令连接一下那个那个机器看看能不能连上。
我也遇到这个问题了 真心诡异!