当前位置: 首页 > article >正文

【WPF】扫描的方式发现局域网中的Android设备

C#部分

扫描局域网的IP地址范围

检查每个IP地址是否可达

using System.Net;
using System.Net.Sockets;

public static class NetworkScanner
{
    public static List<IPAddress> ScanLocalNetwork()
    {
        List<IPAddress> devices = new List<IPAddress>();

        string localIP = GetLocalIPAddress();
        string[] ipParts = localIP.Split('.');
        string baseIP = ipParts[0] + "." + ipParts[1] + "." + ipParts[2] + ".";

        for (int i = 1; i < 255; i++)
        {
            string ip = baseIP + i.ToString();

            // Ping the IP address to check if it's reachable
            Ping ping = new Ping();
            PingReply reply = ping.Send(ip, 100); // Timeout set to 100ms

            if (reply.Status == IPStatus.Success)
            {
                devices.Add(IPAddress.Parse(ip));
            }
        }

        return devices;
    }

    private static string GetLocalIPAddress()
    {
        IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

        foreach (IPAddress ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                return ip.ToString();
            }
        }

        return "";
    }
}

上述代码使用Ping类对局域网中的IP地址进行逐个检查,如果某个IP地址能够成功响应则认为该IP地址上有设备存在,可以将其添加到设备列表中。

一旦发现了局域网中的Android设备的IP地址,你可以使用Socket或者其他网络通信库来建立与设备的通信连接。

开始通信

csharp端建立Socket进行连接和通信:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public static class NetworkCommunication
{
    private const int Port = 12345; // 修改为你自己的端口号

    public static void ConnectAndCommunicate(IPAddress deviceIP)
    {
        try
        {
            // 建立Socket连接
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint endPoint = new IPEndPoint(deviceIP, Port);
            socket.Connect(endPoint);

            Console.WriteLine("Connected to device: " + deviceIP);

            // 发送数据
            string message = "Hello, Android device!";
            byte[] data = Encoding.UTF8.GetBytes(message);
            socket.Send(data);

            // 接收数据
            byte[] buffer = new byte[1024];
            int bytesRead = socket.Receive(buffer);
            string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Received message: " + receivedMessage);

            // 关闭连接
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}

上述代码使用Socket类建立与Android设备的连接,发送一条消息,并接收设备返回的消息。你需要将Port的值修改为你自己的端口号。

Android 端

建立与WPF应用程序的连接并进行通信:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class NetworkCommunication {
    private static final String SERVER_IP = "192.168.0.100"; // 修改为你WPF应用程序所在的IP地址
    private static final int PORT = 12345; // 修改为你WPF应用程序所使用的端口号

    public static void connectAndCommunicate() {
        try {
            // 建立Socket连接
            Socket socket = new Socket(SERVER_IP, PORT);

            // 发送数据
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("Hello, WPF application!");

            // 接收数据
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String receivedMessage = in.readLine();
            System.out.println("Received message: " + receivedMessage);

            // 关闭连接
            out.close();
            in.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用Socket类建立与WPF应用程序的连接,发送一条消息,并接收WPF应用程序返回的消息。

在你的Android应用程序中,可以调用connectAndCommunicate方法以与WPF应用程序建立连接并进行通信。

请注意,你需要将SERVER_IP修改为你WPF应用程序所在的IP地址,并将PORT修改为WPF应用程序所使用的端口号。


http://www.kler.cn/news/160327.html

相关文章:

  • 利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能
  • 笔记67:Transformer
  • springboot 接口文档
  • 【基于openGauss5.0.0简单使用DBMind】
  • AWS Remote Control ( Wi-Fi ) on i.MX RT1060 EVK - 2 “架构 AWS”
  • 会声会影2024软件还包含了视频教学以及模板素材
  • Linux 导入、导出 MySQL 数据库命令
  • AIGC之Image2Video(一)| Animate Anyone:从静态图像生成动态视频,可将任意图像角色动画化
  • 企业数字档案馆室建设指南
  • SQL手工注入漏洞测试(Access数据库)-墨者
  • 【Openstack Train】十六、swift安装
  • vue 学习 -- day39(reactive 对比 ref)
  • 基于深度学习yolov5行人社交安全距离监测系统
  • 探索鸿蒙_ArkTs开发语言
  • 亚马逊云科技Serverless视频内容摘要提取方案
  • 如何调用 API | 学习笔记
  • 动手学习深度学习-跟李沐学AI-自学笔记(3)
  • arcgis导出某个属性的栅格
  • 【开源】基于Vue.js的房屋出售出租系统
  • 华为数通---使用基本ACL限制Telnet登录权限案例
  • 宝塔是可以切换mongodb版本的
  • Django之缓存
  • Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式
  • MySQL联合查询、最左匹配、范围查询导致失效
  • 【EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)
  • 云服务器与nas实现在冷热资源访问,nginx代理
  • 如何设置不同的网页标题(react)
  • 配置CentOS服务器以支持PHP
  • Python-算术运算符详解
  • 参数是Id,但要显示接口中的id对应的名称