我有一个关于Guava的InetAddress.coerceToInteger方法的问题.
根据文档的方法:
public static int coerceToInteger(InetAddress ip)
'返回表示IPv4地址的整数,无论提供的参数是否为IPv4地址."
但是,IPv4范围是无符号的32位,而Java的int是有符号的 - 意味着返回的值只能覆盖相关IPv4范围的一半.
我错过了某人或方法中存在真正的问题吗?
谢谢
我在Intranet上运行Windows Server 2008上的应用程序.
要登录应用程序,请尝试从请求中获取主机名以验证用户.但是,有时应用程序返回IP地址而不是名称,一段时间之后,没有做任何事情,应用程序能够解析名称,一切正常......
这是我用来获取主机名的代码:
InetAddress inaHost = InetAddress.getByName(request.getRemoteAddr());
String hostname = inaHost.getHostName();
System.out.println("[[ Hostname = " + hostname + " ]]");
Run Code Online (Sandbox Code Playgroud)
这是因为Intranet配置(DNS!?),还是我的代码,巫术或其他东西有问题?
我正在尝试执行以下代码。我是 Java 新手,所以这是我第一次接触 java.net。程序中没有错误,但我得到的本地主机地址为 192.168.56.1,而我的 IP 为 192.168.2.10
import java.net.*;
class InetAddressDemo
{
public static void main(String[] args)
{
try
{
InetAddress address = InetAddress.getLocalHost();
System.out.println("\nLocalhost Address : " + address + "\n");
}
catch (Exception e)
{
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我正在开发多人游戏.但是我没有2部手机,所以我一直在我的电脑上运行一个单独的程序(注意:不是模拟器!),它模拟我的程序和多人游戏方面.
但是在PC上我有以下代码:
Packet input = inputQueue.take();
if (clientAddress == input.getAddress())
{
switch (input.type)
{
Run Code Online (Sandbox Code Playgroud)
这很好用,Packet只是一个简单的类,我写的是从Datagram包中获取信息,getAddress()返回一个InetAddress.客户端地址先前已在代码中设置.
然而,Android应用程序具有完全相同的代码,字面上的行完全相同,这个InetAddress不会等同于另一个?如果我使用getHostName()或其他东西获取2 InetAddress的字符串并进行比较,那么它就等于另一个.
我做错了什么并且通过思考我可以将这两个对象与==符号进行比较来假设一些东西?它应该是.equals()吗?我以为android使用相同的java.net代码,但可能有区别吗?
使用InetAddress确保我拥有相同地址的最佳方法是什么?
我试图检查是否可以使用"isReachable"方法访问某些主机.
line 113: oaiBaseURL = "http://www.cnn.com";//////////////////////////////////////
line 114: boolean res = InetAddress.getByName(oaiBaseURL).isReachable(10000);
line 115: System.out.println("------reachable:"+res);
Run Code Online (Sandbox Code Playgroud)
并获取以下错误消息(在eclipse中):
java.net.UnknownHostException: http://www.cnn.com
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source)
at java.net.InetAddress.getAddressFromNameService(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at com.irWizard.web.validator.WizardValidator.validateForm(WizardValidator.java:114)
Run Code Online (Sandbox Code Playgroud)
有谁知道这个错误可能是什么原因?
提前致谢!
我有以下问题:我创建一个ArrayList,我把这个arraylist放在我的客户端的所有IP地址(一个如果客户端有一个网卡,如果客户端运行在具有n个网卡的PC上则为n),不包括环回地址,点对点地址和虚拟地址.
我这样做是这样的:
private static List<String> allIps = new ArrayList<String>();
static {
Enumeration<NetworkInterface> nets;
try {
nets = NetworkInterface.getNetworkInterfaces();
while(nets.hasMoreElements()) {
NetworkInterface current = nets.nextElement();
if ((current.isUp()) && (!current.isPointToPoint()) && (!current.isVirtual()) && (!current.isLoopback())) {
System.out.println(current.getName());
Enumeration<InetAddress> ee = current.getInetAddresses();
while (ee.hasMoreElements()) {
InetAddress i = ee.nextElement();
System.out.println(i.getHostAddress());
allIps.add(i.getHostAddress());
}
}
}
} catch (SocketException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("List of all IP on this client: "
+ allIps.toString());
System.out.println("Number of ip: " + allIps.size());
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作得很好,唯一的问题是我的输出(在Eclipse控制台中)是: …
希望将 IPv6 字符串(例如 2001:0:4137:9e76:34b7:2e31:3f57:fd9a)转换为 BigInteger,并从 BigInteger 转换为 IPv6 字符串。
请在下面找到出现问题的应用程序/环境详细信息。
我看到应用程序中的许多线程有时会进入阻塞状态几分钟。在线程转储分析中,发现 java.net.InetAddress.getLocalHost 调用花费了太多时间。很多线程都卡在这里。为应用程序中打印的每个记录器获取主机名。
该问题是间歇性的。但是当它发生时,应用程序/tomcat将进入暂停状态,从而导致大量线程的积累。一段时间(几秒钟)后,所有阻塞的线程同时解除阻塞。由于请求并发,应用程序将耗尽它在池中维护的数据库连接,从而导致问题/缓慢/服务可用性。作为修复,我确保仅将主机名访问一次到静态变量中,并在整个日志记录过程中使用相同的主机名。我想知道这个问题的详细根本原因。
以下来自线程转储的示例:
"https-jsse-nio-8443-exec-13" #95 daemon prio=5 os_prio=0 tid=0x00007fccadbba800 nid=0xaf5 waiting for monitor entry 0x00007fcb912d1000
java.lang.Thread.State: BLOCKED (on object monitor)
at java.net.InetAddress.getLocalHost(InetAddress.java:1486)
- waiting to lock <0x00000005e71878a0> (a java.lang.Object)
Run Code Online (Sandbox Code Playgroud) 我有一个EJB无状态Bean,由Websphere内的Scheduler自动执行.我的EJB安装在Websphere中.在我的EJB内部,我想向其他应用程序公开的Web服务发出http请求(在同一个服务器内部).我尝试使用相对路径,因为这是我通常在应用程序之间发出请求的方式,但在我的bean中我不知道如何获取主机名和端口来构建URL.
我设法通过这样做得到主机(IP):
InetAddress.getLocalHost().toString();
Run Code Online (Sandbox Code Playgroud)
但我也需要端口号.问题是:如何获取安装EJB应用程序的应用程序服务器(Websphere)的主机和端口号?这可能吗?
这段代码是我尝试发出请求的方式,但这不起作用,因为我需要完整的路径:
URL url = new URL("/MyOtherAppName/myservice");
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length",
Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoOutput(true);
Run Code Online (Sandbox Code Playgroud)
- 编辑1 ----
我认为用户Gas的方法很好,并且使我的应用程序更容易配置.
我按照本指南实现了URL Provider方法:
我正在尝试连接到Web服务器并检查它是否可以从我的计算机访问.问题是,当我尝试使用InetAddress.getByName(地址)时,我收到编译错误:
Error:(20, 50) java: cannot find symbol
symbol: class getByName
location: class java.net.InetAddress
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为当我开始输入这个方法名称时,IntelliJ IDEA向我显示了一个带有名称建议列表的提示,所以我猜错了PATH变量没有问题.当我完成输入方法名称时,它立即用红色绘制并说"无法按名称解析符号".同时,InetAddress.isReachible(100)没有这样的问题,即使考虑到它放在同一个类中.实际上,我只能使用公共静态方法来解决问题,例如InetAddress.getByAddress(),InetAddress.getLoopbackAddress()等.我认为我可能使用旧的java版本,所以我在windows命令行中输入了java -version,这里说的是:
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
String url = "http://reddit.com";
byte [] address = url.getBytes();
InetAddress inetAddress = new InetAddress.getByName(address);
try {
inetAddress.isReachable(100);
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我试图使用InetAddress返回用户输入的网站名称的IP地址,但我在语句中收到错误:InetAddress ip = new InetAddress.getByName(site); 显示的错误是:
InetAddress.getByName cannot be resolved to a type
Run Code Online (Sandbox Code Playgroud)
我的代码:
import java.util.*;
import java.net.*;
import java.io.*;
import java.net.InetAddress;
public class getIP {
public static void main(String args[])throws UnknownHostException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String site;
System.out.println("Enter the url :");
site = br.readLine();
try
{
InetAddress ip = new InetAddress.getByName(site);
}
catch(UnknownHostException ee)
{
System.out.println("Website not found.");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的程序客户端服务器程序,该程序将客户端计算机连接到服务器计算机。
到目前为止,我的代码在localhost上运行良好,但是当我将客户端代码中的IP地址替换为服务器计算机的本地IP地址时,则未完成连接。我认为我的理解InetAddress不对。
套接字连接代码:Client.java
InetAddress ip = InetAddress.getByName("my_ip_address");
Socket s = new Socket(ip, 9876); //<- where the connection timeout happens
Run Code Online (Sandbox Code Playgroud) getByName是在具有https://stackoverflow.com/questions之类的路径的链接上工作还是在链接中仅包含主机(https://stackoverflow.com)?
当我使用包含“ /”的链接时,出现unknownHostException,有关如何解决该问题的任何提示?
控制台说错误在这里:
socket = new Socket(InetAddress.getByName(adr), port);
Run Code Online (Sandbox Code Playgroud)
在此先感谢您,英语不好,因为它不是我的母语,对此我们深表歉意。
inetaddress ×13
java ×12
networking ×2
android ×1
biginteger ×1
ejb ×1
equals ×1
guava ×1
https ×1
ip ×1
ip-address ×1
ipv6 ×1
performance ×1
scala ×1
sockets ×1
stateless ×1
tomcat9 ×1
unknown-host ×1
websphere ×1