如何在给定 SSID 的情况下通过 wifi 打开套接字

How to open socket over wifi given an SSID

我想通过 Wi-Fi 打开连接。我当前的代码是:

WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", "MY_SSID");
wifiConfig.preSharedKey = String.format("\"%s\"", "MY_PASSWORD");

int netId = wifiManager.addNetwork(wifiConfig);
if (netId != -1 ) {
     wifiManager.enableNetwork(netId, true);
}

enableNetwork returns true 表示操作成功。我不确定下一步该怎么做。

我的目标是打开一个套接字,我可以在其中通过刚刚连接到的网络进行自定义 I/O。我怎样才能打开这个网络的套接字?另外,我怎样才能确保我确实连接到网络(是否有我可以设置的BroadcastReceiver)?

任何链接或文档都很棒,我不确定要在线搜索什么

您必须 运行 第一台设备上的服务器具有您喜欢的任何端口,在此示例中我尝试使用 9000:

try {
    log("Waiting for client...");

    ServerSocket serverSocket = new ServerSocket(9000);
    socket = serverSocket.accept();

    log("A new client Connected!");
} catch (IOException e) {}

然后在其他设备上的端口 9000 上搜索此服务器。在本例中为:

for (int i = 1; i <= 255; i++) {
    String ip = range + i;
    try {
        log("Try IP: " + ip);
        socket = new Socket();
        socket.connect(new InetSocketAddress(ip, 9000), 10);

        log("Connected!");
        return true;
    } catch (Exception e) {}
}

如果您有服务器 ip,则不需要循环。 为了进行简单的聊天,我们必须像这样打开输入流和输出流:

try {
    outputStream = new DataOutputStream(socket.getOutputStream());
    inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e1) {
    log("Error: Connection is not stable, exit");
    shutdown();
}

while (true) {
    try {
        String message = inputStream.readLine();
        if (message != null) {
            log(message);
        }
    } catch (IOException e) {}
}

并发送消息:

try {
    String message = input.getText().toString() + "\n";
    outputStream.write(message.getBytes());
} catch (IOException e) {
    e.printStackTrace();
}

对于文件 I/O 使用相同的方法。