JTDS 连接远程服务器失败

JTDS connect to remote server fail

不知道为什么,当应用程序连接到与设备位于同一网络的 SQL 服务器时,我可以毫无问题地连接到它,但现在我需要从设备通过互联网连接到 SQL 服务器,无法正常工作,不知道为什么。我有一个按钮来测试连接,它会调用一个包含这个的方法,该方法在后台 (AsyncTaskRunner)

try
{
    String host, port, dbname, user, password, instance;
    host = _editTextHost.getText().toString();
    port = _editTextPort.getText().toString();
    instance = _editTextInstance.getText().toString();
    dbname = _editTextDbName.getText().toString();
    user = _editTextUser.getText().toString();
    password = _editTextPass.getText().toString();
    String driver = "net.sourceforge.jtds.jdbc.Driver";
    String conString;
    if (TextUtils.isEmpty(port))
    {
        conString = "jdbc:jtds:sqlserver://" + host + ";databaseName=" + dbname + ";instance=" + instance;
    }
    else
    {
        conString = "jdbc:jtds:sqlserver://" + host + ":" + port + ";databaseName=" + dbname + ";instance=" + instance;
    }
    Connection con;
    Class.forName(driver);
    con = DriverManager.getConnection(conString, user, password);
    con.close();
    conSuccess = true;
}
catch (Exception e)
{
    e.printStackTrace();
    Log.e("SQLConfig", "Fail to connect");
    Log.e("SQLConfig", e.toString());
    Log.e("SQLConfig", e.getMessage());
}
return null;

当我尝试连接到同一网络上的 SQL 服务器时没有任何问题,但是当我在设备上激活 4g 时,我总是遇到同样的错误,它找不到实例。但是,如果我使用相同的信息通过 "SQL Server Management Studio" 连接到服务器,我可以毫无问题地连接到服务器。

我正在使用 jtds 驱动程序 1.3.1。

这是怎么回事?谢谢

P.S。我都读过一些关于网络服务的东西,但我想暂时删除这个选项

编辑 1:澄清一下,我可以使用程序 Windows CE 或 SQL Server Management Studio 版本的凭据连接到服务器。当我将外部 IP 和所有需要的信息连接到服务器时,它只连接到 Android

好吧,通过稍微更改 conString,我可以毫无问题地从本地网络或互联网进行连接。

if (TextUtils.isEmpty(port))
{
    conString = "jdbc:jtds:sqlserver://" + host + ";databaseName=" + dbname + ";instance=" + instance;
}
else
{
    conString = "jdbc:jtds:sqlserver://" + host + ":" + port + ";databaseName=" + dbname + ";instance=" + instance;
}

if (TextUtils.isEmpty(port))
{
    conString = "jdbc:jtds:sqlserver://" + host + "/" + instance + ";DatabaseName=" +dbname;
}
else
{
    conString = "jdbc:jtds:sqlserver://" + host + ":" + port + "/" + instance + ";DatabaseName=" + dbname;
}

现在可以毫无问题地使用 public 主机或本地网络访问数据库。