java 从connection中获取ip和端口问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 从connection中获取ip和端口问题相关的知识,希望对你有一定的参考价值。

oracle数据库
我通过connection = DriverManager.getConnection(url, user, password);获取到连接。
现在想从connection中获取数据库所在的ip和端口。
因为url用的是别名,不能直接解析。
想问,能不能获取到,或者有没有其他方法获取。

参考技术A connection.getMetaData().getURL()本回答被提问者采纳 参考技术B URL url=new URL(url);


 url.getHost();

 url.getPort();

追问

这个URL类是解析网址的吧,我在oracle里面没找到这个类,只有java.net.URL

追答

哦,看错了.你是连接URL,这个话,自己定义成一个配置文件比较好!

我正在尝试从 JAVA 中的 ip 地址获取位置信息,但我收到 java.net.SocketException: Connection reset error

【中文标题】我正在尝试从 JAVA 中的 ip 地址获取位置信息,但我收到 java.net.SocketException: Connection reset error【英文标题】:I am trying to get location information from ip address in JAVA but I am getting a java.net.SocketException: Connection reset error 【发布时间】:2014-04-25 04:57:16 【问题描述】:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import javaQuery.importClass.javaQueryBundle;
import javaQuery.j2ee.GeoLocation;
/**
 * Servlet implementation class IP
 */
public class IP extends HttpServlet 
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public IP() 
        super();
        // TODO Auto-generated constructor stub
    

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        // TODO Auto-generated method stub

         String ipAddress = request.getRemoteAddr();
         System.out.println(ipAddress);

         response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();


            //Print out the IP address of the caller
            out.println(request.getRemoteAddr());


         GeoLocation $gl = javaQueryBundle.createGeoLocation();

         System.out.println(ipAddress);


            $gl.MAPTargetByIP(ipAddress, "test");
            System.out.println($gl.Latitude);
            System.out.println($gl.Longitude);
            System.out.println($gl.Country);
            System.out.println($gl.City);
            System.out.println($gl.State);
            System.out.println($gl.GoogleMap_URL);
            System.out.println($gl.GoogleMap_URL_Bubble);


    

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        // TODO Auto-generated method stub
    


这是我的代码片段。我正在获取访问者的 IP 地址,但不是位置信息。 它给 : java.net.SocketException:连接重置 在 java.net.SocketInputStream.read(未知来源) 在 java.net.SocketInputStream.read(Unknown Source)

【问题讨论】:

您在防火墙后面吗?还是您使用代理访问互联网? 是的..但我在禁用防火墙设置后尝试了这个。但仍然是同样的问题。我正在使用我的组织代理访问互联网 啊,我明白了您的问题,您无法访问的原因是您被组织代理阻止了。您需要在代码中解决它。 【参考方案1】:

要告诉java代码所有的HTTP请求都应该通过代理路由,使用下面的sn-p:

System.setProperty("http.proxyHost", "proxyHost"); System.setProperty("http.proxyPort", "proxyPort"); Authenticator authenticator = new Authenticator() public PasswordAuthentication getPasswordAuthentication() return (new PasswordAuthentication("USERNAME","PASSWORD".toCharArray())); ; Authenticator.setDefault(authenticator);

System.setProperty 设置代理主机和端口。 Authenticator 应该是您的公司用户名和密码。现在应该可以了。

【讨论】:

【参考方案2】:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Authenticator;
import java.net.PasswordAuthentication;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.model.*;
import com.maxmind.geoip2.record.Location;
import com.maxmind.geoip2.record.MaxMind;
import com.maxmind.geoip2.record.RepresentedCountry;

import javaQuery.importClass.javaQueryBundle;
import javaQuery.j2ee.GeoLocation;
/**
 * Servlet implementation class IP
 */
public class IP extends HttpServlet 
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public IP() 
        super();

        System.setProperty("http.proxyHost", "proxyHostName");
        System.setProperty("http.proxyPort", "proxyPort");
        Authenticator authenticator = new Authenticator() 
             public PasswordAuthentication getPasswordAuthentication() 
            return (new PasswordAuthentication("USERNAME","PASSWORD".toCharArray()));
            
        ;
        Authenticator.setDefault(authenticator);
        // TODO Auto-generated constructor stub
    

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        // TODO Auto-generated method stub

         String ipAddress = request.getRemoteAddr();
         System.out.println(ipAddress);




         response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();


            //Print out the IP address of the caller
            out.println(request.getLocalAddr());



         GeoLocation $gl = javaQueryBundle.createGeoLocation();

         System.out.println($gl.toString().length());
         System.out.println("--");
         System.out.println($gl.getMACAddressWindows());


            $gl.MAPTargetByIP(ipAddress , "test");
            System.out.println($gl.Latitude);
            System.out.println($gl.Longitude);
            System.out.println($gl.Country);
            System.out.println($gl.City);
            System.out.println($gl.State);
            System.out.println($gl.GoogleMap_URL);
            System.out.println($gl.GoogleMap_URL_Bubble);


    

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        // TODO Auto-generated method stub
    


现在一切正常。

【讨论】:

以上是关于java 从connection中获取ip和端口问题的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试从 JAVA 中的 ip 地址获取位置信息,但我收到 java.net.SocketException: Connection reset error

如何从文本文件中获取代理 IP 和端口

java中怎么获取客户端的真实的ip和端口号

是否可以从 java.sql.Connection 获取 url 或服务器信息 [重复]

在iOS中获取http代理的ip和端口

Java中使用HttpRequest获取用户真实IP地址端口