我在两台机器上都提供Socket服务器端程序,
我客户端程序想如果第一台挂掉,客户端就连第二台!如下写法:_sockC = new SocketClient(); //SocketClient为Socket客户端的构造类,构造函数里没做什么事
this._ServerIp =“192.168.0.3”;
this._Port = this._Port1;
_sockC.Connect(this._ServerIp,this._Port,_TimeOut);//Connect为SocketClient类中的一个方法
if(!_sockC.Connected)
{
  _log.Writeline("Connect Remote Server Fail:"+this._ServerIp);
  //更换服务2地址,端口
  
 this._ServerIp = =“192.168.0.4”;
 this._Port = this._Port2;
 _sockC.Connect(this._ServerIp,this._Port,_TimeOut);
 if(!_sockC.Connected)
 {
  _log.Writeline("Connect Remote Server Fail:"+this._ServerIp);
 return;

}现在发生奇怪问题,
如果3端服务开启,4端服务不管开启还是关闭,都是连接成功的!
如果3端服务关闭,4端开启,它就报两个连接都不成功。server2端服务是没有问题的!
因为我把程序中的“192.168.0.3”,“192.168.0.4”互换,即先检查4是否可以连接时,
如果4端服务开启,3端服务不管开启还是关闭,都是连接成功的!
如果4端服务关闭,3端服务开启都是连接成功的!它就报两个连接都不成功。问题怪就怪在,如果查询的第一个是失败的,后面一个一定也返回连接失败!没有达到设计目的请高手指点一下!问题可能出在哪?很快揭帖!

解决方案 »

  1.   

    我是把服务器的IP放在XML里,然后读到一个ArrayList(ServerList)里头,然后对这个数组进行循环。我的代码如下:
    //===========属性用来判断Socket是否处于连接状态===============================
    public bool P_Connected
    {
      get
      {
        if(m_ClientSocket != null && m_ClientSocket.Connected)
        {
     return true;
    }
    else
    {
      return false;
    }
      }
    }
    //=========对外公布的方法===============================
    public bool F_Connect()
    {
    try
    {
        if(P_Connected)
        {
    return true;
        }
        else
        {
    for(int i = 0; i < ServerList.Count; i++)
    {
             if(F_Connect(i))
        {
            return true;
        }
        else
        {
    continue;
        }
    } return false;

        }
    }
    catch(Exception ex)
    {
        return false;
    }

    //========================================================
    private bool F_Connect(int _ServerId)
    {
      try
      {
    if(_ServerId >= 0 && _ServerId <= ServerList.Count)
    {
        m_ServerIpAddress = (IPAddress)ServerList[_ServerId];

      if( F_ProcessConnect() ) //此方法进行连接,成功返回true,失败返回false
      {
    return true;
      }
      else
      {
      return false;
      }
    }
    else
    {
      return false;
    }
      }
      catch(Exception ex)
      {
    return false;
      }
    }