uni-app 局域网中搜索服务器

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app 局域网中搜索服务器

具体需求:

  1. 获取手机的ip和子网掩码,计算出该网段的ip范围,比如:手机ip是192.168.1.10,子网掩码为255.255.255.0,则ip范围为192.168.1.1~192.168.1.255。
  2. 局域网中会存在若干个服务器,服务器开启了固定的端口(如:8322),但手机不知道服务器的ip,需逐一进行连接,找到能连接成功的ip。
  3. 多线程、异步。
  4. 支持安卓、iOS。
6 回复

专业 双端插件开发 Q 1196097915


可以做,联系QQ:1804945430

专业团队承接双端(Android,iOS)原生插件开发,uni-app外包开发。有意联系QQ:1559653449

大哥,请问解决了吗?

解决了,加我vx:uniapp-9527

在处理局域网内搜索服务器的问题时,使用uni-app可以通过多种方式实现,例如通过UDP广播、DNS-SD(DNS-Based Service Discovery)或者扫描特定端口等方式。下面我将提供一个基于UDP广播的简单示例代码,这种方法适用于局域网内设备发现服务。

UDP广播示例

UDP广播是一种在局域网内发送数据包到所有设备的方法,非常适合用于服务发现。

服务器端代码(Node.js)

首先,我们编写一个简单的Node.js服务器,它会在启动时广播自己的IP地址和端口。

const dgram = require('dgram');
const server = dgram.createSocket('udp4');

const message = Buffer.from(JSON.stringify({
  type: 'server',
  ip: '192.168.1.100', // 替换为你的服务器IP
  port: 3000 // 替换为你的服务器端口
}));

const client = dgram.createSocket('udp4');
client.send(message, 0, message.length, 41234, '255.255.255.255', (err) => {
  if (err) {
    console.log(err);
    client.close();
  } else {
    console.log('Message sent: ' + message);
    server.bind(3000, () => {
      console.log('Server listening on port 3000');
    });
  }
});

客户端代码(uni-app)

uni-app中,我们编写一个UDP客户端来监听广播消息。

// 在页面的onLoad或者mounted生命周期中初始化
const dgram = require('dgram');
const client = dgram.createSocket('udp4');

client.on('message', (msg, rinfo) => {
  const data = JSON.parse(msg.toString());
  if (data.type === 'server') {
    console.log(`Found server at ${data.ip}:${data.port}`);
    // 在这里处理找到的服务器信息,比如保存到状态或者发起连接
  }
});

client.on('listening', () => {
  const address = client.address();
  console.log(`UDP Client listening on ${address.address}:${address.port}`);
  client.bind(41234, () => {
    console.log('UDP Client bound to port 41234');
    // 可选:加入多播组(如果需要的话)
    // client.addMembership('224.0.0.1');
  });
});

client.bind(41234); // 绑定到接收广播的端口

注意事项

  1. 防火墙和网络配置:确保防火墙和网络配置允许UDP广播的发送和接收。
  2. IP和端口:示例中的IP和端口需要根据你的实际情况进行修改。
  3. 跨平台uni-app在iOS和Android上运行JavaScript代码时,可能需要额外的权限配置或者插件来访问网络。
  4. 安全性:UDP广播消息是不加密的,因此不适合传输敏感信息。

通过上述代码,你可以在局域网内使用uni-app搜索并发现服务器。

回到顶部