Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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 客户端无法连接到服务器套接字-Android_Java_Android_Sockets_Timeout_Serversocket - Fatal编程技术网

Java 客户端无法连接到服务器套接字-Android

Java 客户端无法连接到服务器套接字-Android,java,android,sockets,timeout,serversocket,Java,Android,Sockets,Timeout,Serversocket,我正在开发一个Android应用程序。有一个设备作为服务器。客户端设备可以连接到服务器设备。我想通过局域网来做。我不确定这是不是最好的方式,但我开始做一个基于套接字的通信 这是我的服务器线程: @Override public void run() { Socket socket = null; try { serverSocket = new ServerSocket(7777); while (!Thread.currentThread().i

我正在开发一个Android应用程序。有一个设备作为服务器。客户端设备可以连接到服务器设备。我想通过局域网来做。我不确定这是不是最好的方式,但我开始做一个基于套接字的通信

这是我的服务器线程:

@Override
public void run() {
    Socket socket = null;
    try {
        serverSocket = new ServerSocket(7777);
        while (!Thread.currentThread().isInterrupted()) {
            try {
                socket = serverSocket.accept();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
我还有另一个沟通的线索


现在,这是我的客户端线程:

    public void run() {
        try {
            InetAddress serverAddress = InetAddress.getByName("10.0.2.2");
            socket = new Socket(serverAddress, 7777);
            writer = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream())), true);
            writer.println("Hello!");
            writer.flush();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
问题是,当客户端尝试连接到服务器时,连接将超时


编辑:权限:

<uses-permission 
    android:name="android.permission.INTERNET"/>    
<uses-permission 
    android:name="android.permission.ACCESS_NETWORK_STATE"/>

我终于解决了这个问题。我不再用模拟器吮吸了。我有两个安卓设备。我向服务器添加了下一个代码:

public static String getIPAddress() {
    try {
        List<NetworkInterface> interfaces = Collections.list(
                NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface networkInterface : interfaces) {
            List<InetAddress> addresses = Collections.list(
                    networkInterface.getInetAddresses());
            for (InetAddress inetAddress : addresses) {
                if (!inetAddress.isLoopbackAddress()) {
                    String sAddress = inetAddress.getHostAddress().toUpperCase();
                    if (InetAddressUtils.isIPv4Address(sAddress)) {
                        return sAddress;
                    } else {
                        int delim = sAddress.indexOf('%');
                        return delim < 0 ? sAddress : sAddress.substring(0,
                                delim);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}
public静态字符串getIPAddress(){
试一试{
列表接口=Collections.List(
NetworkInterface.getNetworkInterfaces());
用于(网络接口网络接口:接口){
列表地址=Collections.List(
networkInterface.getInetAddresses());
用于(InetAddress InetAddress:addresses){
如果(!inetAddress.isLoopbackAddress()){
字符串sAddress=inetAddress.getHostAddress().toUpperCase();
if(InetAddressUtils.isIPv4Address(sAddress)){
返回鞍;
}否则{
int delim=sAddress.indexOf('%');
返回delim<0?鞍形应力:鞍形应力。子串(0,
德利姆);
}
}
}
}
}捕获(例外e){
e、 printStackTrace();
}
返回“”;
}

现在我可以得到服务器地址了,它看起来像:192.168.1.X。我把它放在服务器设备上的文本视图中,客户端必须输入这个ip才能连接到服务器。这对我来说已经足够了,因为我想在本地网络上使用它。

你能通过telnet连接到10.0.2.2:7777吗?如果知道服务器地址IP,则不需要使用get ByName()。你可以连接新的插座(“10.0.2.2”,7777)。我不能。我收到以下消息:“连接到10.0.2.2…无法打开到主机的连接,端口7777:连接失败”