Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从jdbc连接中了解客户端ip端口_Java_Sql Server_Jdbc_Connection - Fatal编程技术网

Java 如何从jdbc连接中了解客户端ip端口

Java 如何从jdbc连接中了解客户端ip端口,java,sql-server,jdbc,connection,Java,Sql Server,Jdbc,Connection,我正在测试MSSQL。“如何延长连接后创建的会话信息的时间?” 因此,尝试连接MSSQL JDBC,然后选择sys.dm_exec_会话和sys.dm_exec_与客户端Ip和端口的连接 但是,我不知道如何从JDBC连接获取客户端Ip和端口 或者可以使用套接字创建JDBC连接吗 显示我的测试代码 try { DriverManager.registerDriver( new com.microsoft.sqlserver.jdbc.SQLServe

我正在测试MSSQL。“如何延长连接后创建的会话信息的时间?”

因此,尝试连接MSSQL JDBC,然后选择sys.dm_exec_会话和sys.dm_exec_与客户端Ip和端口的连接

但是,我不知道如何从JDBC连接获取客户端Ip和端口

或者可以使用套接字创建JDBC连接吗

显示我的测试代码

try {
        DriverManager.registerDriver(
                new com.microsoft.sqlserver.jdbc.SQLServerDriver());
        DriverManager.setLoginTimeout(10);
    } catch (Exception ex) {
        System.out.println("Fail to register sqlserver driver.");
        return;
    }

    String url = "jdbc:sqlserver://";
    String ip = "10.1.1.1";
    String port = "1433";
    String catalog = "master";
    String user = "jtlee";
    String pwd = "123456789";

    url = url + ip + ":" + port + ";databasename=" + catalog;

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    try {
        long startTime = System.nanoTime();

        conn = DriverManager.getConnection(url, user, pwd);
        pstmt = conn.prepareStatement(
                "SELECT "
                + "     count(*) "
                + "FROM "
                + "     sys.dm_exec_connections connections,"
                + "     sys.dm_exec_sessions sessions "
                + "WHERE "
                + "     connections.session_id = sessions.session_id "
                + "     and connections.client_net_address= ? "
                + "     and connections.client_tcp_port= ? ");

        /* I need this information... */
        String clientIp;
        int clientPort;

        pstmt.setString(1, clientIp);
        pstmt.setInt(2, clientPort);
        rs = pstmt.executeQuery();

        if (rs.next()) {
            ...

感谢您阅读我的奇怪英语。

如果您想获取活动连接的IP和端口,您可以使用
查询sys.dm_exec_connections
,其中session\u id=@@SPID,例如

sql=
“选择客户端\u网络\u地址、客户端\u tcp\u端口、本地\u网络\u地址、本地\u tcp\u端口”+
“来自sys.dm_exec_connections”+
“其中会话_id=@@SPID”;
试一试(
语句st=conn.createStatement();
结果集rs=st.executeQuery(sql)){
while(rs.next()){
System.out.printf(“连接在服务器上的%s:%d和作为客户端的%s:%d之间。%n”,
rs.getString(“本地网络地址”),
rs.getInt(“本地\u tcp\u端口”),
rs.getString(“客户网络地址”),
rs.getInt(“客户端\u tcp\u端口”)
);
}
}
生产

连接在服务器上的192.168.1.12:1433和作为客户端的192.168.1.101:49744之间。