我遇到以下问题:当我尝试使用外部IP地址(PC的IP而不是本地IP的createTcpServer
=在cmd.exe中运行ipconfig后我们看到的输出)时,发生以下错误:
服务器错误:异常打开端口“ 9092”(端口可能正在使用),原因:“ java.net.BindException:无法分配请求的地址:JVM_Bind”
[90061-169]
但是,该端口未使用。我已经使用netstat -a -n进行了检查。我已启用我的外部IP,并且已从路由器禁用了防火墙。我的外部IP现在可以被ping通了。
请帮我。
更新:这是我启动tcp服务器的代码。
package businessApp;
import org.h2.tools.Server; //imports the server utility
public class startTcpServerForH2 {
Server server; //the server's instance variable
private static final String SERVER_IP = "192.168.1.101"; //fixed IP of the server
private static final String SERVER_PORT = "9092"; //fixed port the server is listening to
public void tcpServer() { //method responsible to create the tcp server
optionPane optPane = new optionPane(); //option pane for debugging purposes, shows the server's status
try { //catches any server related errors, if the connection is broken etc.
//server uses the IP and port defined earlier, allows other computers in the LAN to connect and implements the secure socket layer (SSL) feature
server = Server.createTcpServer( //create tcp server
new String[] { "-tcpPort" , SERVER_PORT , "-tcpAllowOthers" , "-tcpSSL" }).start();
System.out.println(server.getStatus()); //prints out the server's status
optPane.checkServerStatus(server.getStatus()); //prints out the server's status on the option pane as well
} catch(Exception ex){
System.out.println("Error with Server: " + ex.getMessage());
}
}
public static void main(String[] args){
startTcpServerForH2 tcpServ = new startTcpServerForH2(); //create a new server object
tcpServ.tcpServer(); //starts the tcp server
}
}
第二次更新:这是h2Connection代码。
打包businessApp;
导入java.sql。*; //导入sql功能
//负责与H2数据库引擎连接的类public class h2Connection {
Connection conn; //connection variable
DatabaseMetaData dbmd; /** Metadata variable which include methods such as the following:
* 1) Database Product Name
* 2) Database Product Version
* 3) URL where the database files are located (in TCP mode)
*/
Statement stm; //statements variable
ResultSet rst; //result sets variable
private static final String SERVER_IP = "..."; //here I enter my WAN_IP
private static final String SERVER_PORT = "9092";
public Connection connectionToH2(Connection connt) {
optionPane optPane = new optionPane(); //create new option pane object
String outputConn = null; //declare & initialize string which will hold important messages
try {
Class.forName("org.h2.Driver"); //Driver's name
/** The String URL is pertained of the following:
* 1) jdbc which java implements so that it can take advantage of the SQL features
* 2) Which Database Engine will be used
* 3) URL where the files will be stored (as this is a TCP connection)
* 4) Schema: businessApp
* 5) Auto server is true means that other computers can connect with the same databse at any time
* 6) Port number of the server is also defined
*/
String url = "jdbc:h2:tcp://" + SERVER_IP + ":" + SERVER_PORT + "/C:/Databases/businessApp;IFEXISTS=TRUE";
System.out.println(url); //prints out the url the database files are located as well as the h2 features used (SSL)
connt = DriverManager.getConnection(url, "sa", ""); //Driver Manager defines the username & password of the database
System.out.println(connt.getCatalog()); //prints out the database schema
optPane.checkServerStatus(connt.getCatalog()); //prints out the database schema on the option pane as well
connt.setAutoCommit(false); //set AutoCommit to false to control commit actions manually
//outputs H2 version and the URL of the database files which H2 is reading from, for confirmation
dbmd = connt.getMetaData(); //get MetaData to confirm connection
outputConn = "Connection to "+dbmd.getDatabaseProductName()+" "+
dbmd.getDatabaseProductVersion()+ " with the URL " + dbmd.getURL()+" was successful.\n";
System.out.println(outputConn); //outputs the message on the system (NetBeans compiler)
optPane.checkH2Connection(outputConn); //outputs the message on top of the frame
} catch (ClassNotFoundException ex){ //In case there is an error for creating the class for the Driver to be used
System.out.println("Error creating class: " + ex.getMessage());
} catch(SQLException ex){ //Any error associated with the Database Engine
System.out.println("SQL error: " + ex.getMessage());
optPane.checkServerStatus("SQL error: " + ex.getMessage());
}
return connt; //As the method is not void, a connection variable must be returned
}
}
当我想连接到h2数据库时,创建一个新的h2Connection对象并使用它进行连接。我逐字地遵循了H2手册。您还需要什么?
如下面所示的命令行帮助中所述,“
防止远程访问”
建议以下内容:
默认情况下,启动H2控制台,TCP服务器或PG服务器时,该数据库不允许来自其他计算机的连接。远程访问可以使用命令行选项来启用
-webAllowOthers
,-tcpAllowOthers
,-pgAllowOthers
。
有关这些选项的重要注意事项,请参阅文档。
附录:对我有用,只要打开防火墙Server
后 重新启动即可;您根本不需要setProperty()
生产线;在LAN IP
到你的WAN_IP
转发端口9092应该是您的主机的IP地址; 然后您可以通过以下方式打开外壳WAN_IP
:
java -cp h2.jar org.h2.tools.Shell -url
jdbc:h2:tcp://WAN_IP/~/path/to/test;ifexists=true"
命令行帮助:
$ java -cp。:/ opt / h2 / bin / h2.jar org.h2.tools.Shell-?
使用JDBC访问数据库的交互式命令行工具。
用法:java org.h2.tools.Shell
选项区分大小写。支持的选项有:
[-帮助]或[-?]打印选项列表
[-url“”]数据库URL(jdbc:h2:...)
[-user]用户名
[-password]密码
[-driver]要使用的JDBC驱动程序类(在大多数情况下不是必需的)
[-sql“”]执行SQL语句并退出
[-properties“”]从此目录加载服务器属性
如果特殊字符无法正常工作,则可能需要使用
-Dfile.encoding = UTF-8(Mac OS X)或CP850(Windows)。
另请参见http://h2database.com/javadoc/org/h2/tools/Shell.html
$ java -cp /opt/h2/bin/h2.jar org.h2.tools.Server-?
启动H2控制台(Web-)服务器,TCP和PG服务器。
用法:java org.h2.tools.Server
不带选项运行时,将启动-tcp,-web,-browser和-pg。
选项区分大小写。支持的选项有:
[-帮助]或[-?]打印选项列表
[-web]使用H2控制台启动Web服务器
[-webAllowOthers]允许其他计算机连接-参见下文
[-webDaemon]使用守护程序线程
[-webPort]端口(默认值:8082)
[-webSSL]使用加密(HTTPS)连接
[-浏览器]启动浏览器连接到Web服务器
[-tcp]启动TCP服务器
[-tcpAllowOthers]允许其他计算机连接-参见下文
[-tcpDaemon]使用守护程序线程
[-tcpPort]端口(默认值:9092)
[-tcpSSL]使用加密(SSL)连接
[-tcpPassword]关闭TCP服务器的密码
[-tcpShutdown“”]停止TCP服务器;示例:tcp:// localhost
[-tcpShutdownForce]不要等到所有连接都关闭
[-pg]启动PG服务器
[-pgAllowOthers]允许其他计算机连接-参见下文
[-pgDaemon]使用守护线程
[-pgPort]端口(默认值:5435)
[-properties“”]服务器属性(默认:〜,禁用:null)
[-baseDir] H2数据库的基本目录(所有服务器)
[-ifExists]只能打开现有数据库(所有服务器)
[-trace]打印其他跟踪信息(所有服务器)
选项-xAllowOthers有潜在的风险。
有关详细信息,请参阅“高级主题/防止远程访问”。
另请参见http://h2database.com/javadoc/org/h2/tools/Server.html
问题内容: 我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。 我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗? 如果您需要更
我在将 rails 2.3.5 应用程序连接到远程数据库时遇到问题。 在我的数据库.yml中,我有: 我得到的错误是: 无法通过套接字连接到本地 MySQL 服务器 (2) 我知道问题不在权限或用户设置上,因为当我使用相同的mysqlgem运行一个简单的ruby脚本时,它会起作用。此外,我的python脚本可以连接,我可以通过CLI与连接 我似乎无法让rails使用192.168.1.113而不是
从。NET应用程序连接到远程MongoDb实例有点困难。 我创建了一个非常简单的控制台应用程序,它基本上是一个冒烟测试,并带回一个项目。如果我在运行MongoDb服务的服务器上运行它,它将与MongoDb进行对话,不会有任何问题。ConnectionString就是。 我已经为服务器上的27017端口创建了一个inboudd规则,甚至完全关闭了防火墙。 Mongo服务器的cfg文件非常基本: 干杯
问题内容: 我正在使用SQL Server 2008 R2和Microsoft Excel。 我已将服务器设置为通过Windows用户 或 数据库用户登录 我 可以 用数据库用户正常登录数据库 我 可以 使用Silverlight应用程序连接到数据库 我 无法 弄清楚如何从Excel中的远程PC连接 我去了Excel->数据->从其他来源->从SQL Server 我的服务器名称是,因此在Exce
问题内容: 如何从Java应用程序通过SSH连接到远程MySQL数据库?小代码示例对我有所帮助,对此我将不胜感激。 问题答案: 我的理解是,您想访问在远程计算机上运行的mysql服务器,并通过SSH隧道侦听端口3306。 要使用命令行ssh客户端从本地计算机上的端口1234到远程计算机上的端口3306的隧道,您可以从本地计算机上键入以下命令: 要从Java执行相同的操作,可以使用JSch(SSH2
示例代码: 客户端日志: 13/02/06 10:58:32信息zookeeper.clientcnxn:服务器192.168.113.27/192.168.113.27:2181上完成会话建立,sessionid=0x13CAE4BD91B0003,协商超时=40000