Java Can';无法将IP地址解析为主机名
我最初是通过Java main方法为Android应用程序运行服务器,但由于Android Studio的原因,我不得不通过Android main活动来运行服务器。在尝试从主活动运行它时,我遇到了绑定到指定端口的问题。当我尝试与我的客户机连接时(我知道可以正常工作),它返回连接被拒绝的错误,这向我表明我的服务器实际上没有在指定的端口上侦听。这是我的服务器和主要活动。我相信我的语法在设置这一切时一定有一些小问题Java Can';无法将IP地址解析为主机名,java,android,multithreading,sockets,client-server,Java,Android,Multithreading,Sockets,Client Server,我最初是通过Java main方法为Android应用程序运行服务器,但由于Android Studio的原因,我不得不通过Android main活动来运行服务器。在尝试从主活动运行它时,我遇到了绑定到指定端口的问题。当我尝试与我的客户机连接时(我知道可以正常工作),它返回连接被拒绝的错误,这向我表明我的服务器实际上没有在指定的端口上侦听。这是我的服务器和主要活动。我相信我的语法在设置这一切时一定有一些小问题 public class Server extends Thread { Serve
public class Server extends Thread {
ServerSocket serverSocket = null;
final Reactor reactor = new Reactor();
int port;
boolean running;
Server(int p) throws IOException {
running = true;
port = p;
}
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
while (running == true) {
try {
System.out.println("Connecting");
System.out.println("Server running on port: " + port);
Socket listener = serverSocket.accept();
} catch (IOException e) {
e.printStackTrace();
running = false;
}
}
}
}
这里是我的mainActivity,它只是启动在指定端口上侦听的服务器线程
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Server server = null;
try {
server = new Server(4600);
} catch (IOException e) {
e.printStackTrace();
}
server.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
这是来自客户端的堆栈跟踪
02-14 17:42:56.109 1314-1364/edu.carleton.l8client W/System.err﹕ j java.net.UnknownHostException: Unable to resolve host "172.17.201.280": No address associated with hostname
02-14 17:42:56.109 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
02-14 17:42:56.117 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
02-14 17:42:56.117 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.InetAddress.getAllByName(InetAddress.java:214)
02-14 17:42:56.117 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.Socket.tryAllAddresses(Socket.java:108)
02-14 17:42:56.117 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.Socket.<init>(Socket.java:177)
02-14 17:42:56.127 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.Socket.<init>(Socket.java:149)
02-14 17:42:56.127 1314-1364/edu.carleton.l8client W/System.err﹕ at edu.carleton.l8client.Client.run(Client.java:99)
02-14 17:42:56.127 1314-1364/edu.carleton.l8client W/System.err﹕ Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
02-14 17:42:56.137 1314-1364/edu.carleton.l8client W/System.err﹕ at libcore.io.Posix.getaddrinfo(Native Method)
02-14 17:42:56.137 1314-1364/edu.carleton.l8client W/System.err﹕ at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
02-14 17:42:56.147 1314-1364/edu.carleton.l8client W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
02-14 17:42:56.109 1314-1364/edu.carleton.l8客户端W/System.err﹕ j java.net.UnknownHostException:无法解析主机“172.17.201.280”:没有与主机名关联的地址
02-14 17:42:56.109 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.InetAddress.lookupHostByName(InetAddress.java:424)
02-14 17:42:56.117 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
02-14 17:42:56.117 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.InetAddress.getAllByName(InetAddress.java:214)
02-14 17:42:56.117 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.Socket.tryalladdress(Socket.java:108)
02-14 17:42:56.117 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.Socket(Socket.java:177)
02-14 17:42:56.127 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.Socket(Socket.java:149)
02-14 17:42:56.127 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于edu.carleton.l8client.Client.run(Client.java:99)
02-14 17:42:56.127 1314-1364/edu.carleton.l8客户端W/System.err﹕ 原因:libcore.io.GaiException:getaddrinfo失败:EAI_NODATA(没有与主机名关联的地址)
02-14 17:42:56.137 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于libcore.io.Posix.getaddrinfo(本机方法)
02-14 17:42:56.137 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
02-14 17:42:56.147 1314-1364/edu.carleton.l8客户端W/System.err﹕ 位于java.net.InetAddress.lookupHostByName(InetAddress.java:405)
172.17.201.280不是有效的IP地址,因此它将其解释为主机名
尝试0.0.0.0-255.255.255.255范围内的内容
(280大于255)能否提供抛出的堆栈跟踪。您是否在同一网络中运行服务器和客户端?IP是否正确?端口不是问题。是的,端口是正确的,IP地址也是正确的。我已经运行过很多次了,我知道通常当这个错误弹出时,你会为Android应用程序设置正确的权限吗?我没有你的第二次许可,所以我会加上。我还想从我的计算机或服务器的虚拟设备使用IP地址吗?IP地址可以。我已经在从main()运行的服务器上测试了我的客户机,它运行良好。。只是上面从主活动运行的服务器不工作引号:无法解析不是有效IP地址的主机“172.17.201.280”。这就是为什么他说无法解析主机。现在你必须找出它的来源。