Java 热点和客户端之间的Android套接字连接

Java 热点和客户端之间的Android套接字连接,java,android,sockets,wifi,hotspot,Java,Android,Sockets,Wifi,Hotspot,我正在制作一个应用程序,用于检查某些连接(查找SSID列表),如果找不到任何连接,则为所述连接创建一个热点。基本上,它应该充当一个局域网。 我成功地创建了热点,之后它会在服务器套接字上侦听传入的连接: Thread socketThread = new Thread(new Runnable() { @Override public void run() { int port = Constants.PORT + socketList.si

我正在制作一个应用程序,用于检查某些连接(查找SSID列表),如果找不到任何连接,则为所述连接创建一个热点。基本上,它应该充当一个局域网。 我成功地创建了热点,之后它会在服务器套接字上侦听传入的连接:

Thread socketThread = new Thread(new Runnable() {
        @Override
        public void run() {
            int port = Constants.PORT + socketList.size()-1;
            try {
                ServerSocket serverSocket = null;
                serverSocket = new ServerSocket(port);
                Log.d(TAG, "Socket listening for connections: " + port);
                Socket client = serverSocket.accept();
                Log.d(TAG, "Server: connection done");
                InputStream inputstream = client.getInputStream();
                DataInputStream commStream = new DataInputStream(inputstream);
                byte[] b = new byte[16];
                while (commStream.read(b,0, 16) != -1)
                    Log.d(TAG, new String(b, "ASCII"));
                serverSocket.close();
                Log.d(TAG, "Server socket done");
            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }
        }

    });
    socketList.add(socketThread);
    socketThread.start();
如果我创建热点并用pc连接到它,我就可以使用netcat并连接到所述插座:

netcat 192.168.43.1 8988
其中192.168.43.1是热点的默认Android IP地址,8988是我正在使用的端口。 然而,当我试图通过另一台运行该应用程序并连接到热点的设备执行同样的操作时,它不起作用。 以下是客户端代码:

clientThread = new Thread(new Runnable() {
        @Override
        public void run() {
            int port = Constants.PORT ;
            try {
                Socket socket =new Socket();
                socket.bind(null);
                socket.connect((new InetSocketAddress("192.168.43.1", port)), 20000);
                OutputStream stream = socket.getOutputStream();
                DataOutputStream commStream = new DataOutputStream(stream);
                commStream.write("1234567890123456".getBytes());
                socket.close();
                Log.d(TAG, "Client socket done");
            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }
        }

    });
    clientThread.start();
它甚至没有连接到服务器套接字,只是等待超时。这里有什么我做错的吗


提前感谢。

您无法在创建热点的设备上创建具有IP(192.168.43.1)的服务器套接字。因此,只需在已连接到热点的另一台设备上反转服务器套接字即可


e、 g.假设您已在设备A上创建热点,并且设备B已连接到A,因此,请使用分配的本地IP在设备B上创建服务器套接字,并通过查找设备B的IP在A中创建套接字实例。

您无法在创建热点的设备上创建具有IP(192.168.43.1)的服务器套接字。因此,只需在已连接到热点的另一台设备上反转服务器套接字即可


e、 g.假设您已在设备A上创建热点,设备B已连接到A,因此,请使用分配的本地IP在设备B上创建服务器套接字,并通过查找设备B的IP在A中创建套接字实例。

192.168.43.1是本地IP地址,您是否正在本地网络上尝试此操作?它应该是热点提供商(我的设备)的IP地址;我想让它创建一个局域网,并与连接到它的设备进行通信。不是真的,我只是适应于打开客户端上的服务器套接字,让接入点启动连接。还没弄清楚到底出了什么问题。它已经达到了它的目的,但也许我将来会再次查找它。192.168.43.1是一个本地IP地址,您是否正在本地网络上尝试此功能?它应该是热点提供商(我的设备)的IP地址;我想让它创建一个局域网,并与连接到它的设备进行通信。不是真的,我只是适应于打开客户端上的服务器套接字,让接入点启动连接。还没弄清楚到底出了什么问题。它已经达到了它的目的,但也许我将来会再次查找它。我不能在热点提供程序上创建服务器套接字的具体原因是什么?我不能在热点提供程序上创建服务器套接字的具体原因是什么?