Java 使用计算机名而不是IP地址通过Wi-Fi连接

Java 使用计算机名而不是IP地址通过Wi-Fi连接,java,android,ip-address,Java,Android,Ip Address,我已经通过Wi-Fi连接了两台电脑,我正在使用IP地址进行连接,如以下示例所示: String ipAddress = "192.168.X.X"; Socket socket = new Socket(ipAddress, 8888); 我的IP地址经常变化,所以这对我来说是个麻烦,我想用计算机的名称来代替这个。这怎么可能 编辑: 从下面的回复中,我可以在两台电脑上这样做: String ipAddress = "somename"; Socket socket = new Socket(I

我已经通过Wi-Fi连接了两台电脑,我正在使用IP地址进行连接,如以下示例所示:

String ipAddress = "192.168.X.X";
Socket socket = new Socket(ipAddress, 8888);
我的IP地址经常变化,所以这对我来说是个麻烦,我想用计算机的名称来代替这个。这怎么可能

编辑:

从下面的回复中,我可以在两台电脑上这样做:

String ipAddress = "somename";
Socket socket = new Socket(InetAddress.getByName(ipAddress), 12345);
还有这个

String ipAddress = "somename";
Socket socket = new Socket(ipAddress, 8888);

但当我把它应用到我的Android应用程序上时,它就不起作用了。在安卓系统中有没有一种特殊的方法来实现这一点?

您也可以使用主机名来代替IP地址。例如,如果您的服务器具有主机名“foo.bar.com”,则可以使用

Socket socket = new Socket("foo.bar.com", port);
在本地网络中,您应该能够使用本地pc的主机名。我刚刚编写了一个成功连接到printserver的小示例:

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;


public class SocketTester {

    /**
     * @param args
     * @throws IOException 
     * @throws UnknownHostException 
     */
    public static void main(String[] args) throws UnknownHostException, IOException {
        //Create socket connection
           try{
             Socket socket = new Socket("printserver", 23);
             BufferedReader in = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));
             try{
                 while(in.read()!=-1){
                     String line = in.readLine();
                     System.out.println("Text received: " + line);
                 }
               } catch (IOException e){
                 System.out.println("Read failed");
                 System.exit(1);
               }

           } catch (UnknownHostException e) {
             System.out.println("Unknown host: kq6py");
             System.exit(1);
           } catch  (IOException e) {
             System.out.println("No I/O");
             System.exit(1);
           }

    }

}

您必须有一个名称解析系统,Java可以使用它。如果是Windows,也许安卓已经赢得了分辨率?尝试使用InetAddress'
.getByName(“TheMachineName”)
这并不总是有效的。我记不清确切的时间和条件是什么,但我肯定记得它不起作用。我认为它依赖于操作系统。我已经尝试过了,并且能够在我的电脑上成功地做到这一点,但它在我的Android设备上不起作用。它将强制关闭。