前言:
当前兄弟们对“java 海康威视”大概比较看重,咱们都想要知道一些“java 海康威视”的相关文章。那么小编也在网摘上搜集了一些对于“java 海康威视””的相关文章,希望你们能喜欢,同学们一起来学习一下吧!SADP工具很容易扫描到海康的IP相机,如下图所示
那么Java该怎么实现了,用wireshark抓包,发现是SSDP协议
1. 引言
在现代网络中,设备之间的自动发现和通信是至关重要的。SSDP(Simple Service Discovery Protocol)是一种用于在本地网络中发现和公布设备及服务的协议。本文将详细介绍SSDP的概念、工作原理、协议解析以及其在客户端和服务端的伪代码实现。同时,还将讨论相关的计算机网络概念,如组播和单播。
2. SSDP介绍、应用与优缺点及单播组播概念
2.1 SSDP概念
SSDP是UPnP(Universal Plug and Play)协议栈的一部分,旨在使网络设备和服务能够自动发现和互操作。它利用HTTPU(HTTP over UDP)进行通信,允许设备在本地网络中相互发现并交换信息。
2.2 SSDP的应用
智能家居设备:如智能电视、灯光控制、安防系统等。
网络打印机:自动发现并连接到网络打印机。
媒体服务器:发现和连接到家庭媒体服务器进行内容流传输。
2.3 SSDP的优缺点
优点
自动化:设备可以自动发现和配置,无需人工干预。
简单性:协议简单,易于实现和使用。
缺点
安全性:由于使用UDP广播,可能会导致未经授权的设备发现和连接。
网络负载:大量设备同时发送SSDP消息可能会增加网络负载。
2.4 单播和组播概念
单播
单播(Unicast)是一种一对一的通信方式,数据包从单个发送者传输到单个接收者。单播是最常见的网络通信方式,用于大多数的互联网应用,如网页浏览、电子邮件等。
单播的优点
简单性:实现和管理相对简单,网络设备普遍支持。
可靠性:点对点传输,易于控制和监视。
单播的缺点
效率低:在需要同时传输给多个接收者时,效率较低,因为每个接收者都需要单独传输。
组播
组播(Multicast)是一种网络通信方式,允许信息被同时发送到一组指定的接收者,而不是单个接收者或广播给所有接收者。组播在IP网络中通过组播地址进行标识,典型应用包括视频会议、网络电视和在线游戏。
组播的优点
高效性:数据包只在需要的网络路径上传输,节省带宽。
可扩展性:适用于大规模的多点传输,如视频流。
组播的缺点
复杂性:组播路由的实现和管理较为复杂。
设备支持:需要网络设备支持组播协议,如IGMP(Internet Group Management Protocol)。
那么我们可以通过UDP发送组播消息即可
package org.example;import java.net.*;import java.util.UUID;//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。public class Main{ public static void main(String[] args) throws Exception { String host = "239.255.255.250";//广播地址 int port = 37020;//广播的目的端口 String uuid = UUID.randomUUID().toString().replace("-", ""); String uUIdMessage= String.format("<?xml version=\"1.0\" encoding=\"utf-8\"?><Probe><Uuid>%s</Uuid><Types>inquiry</Types></Probe>", uuid);// String message = "M-SEARCH * HTTP/1.1\n" +// "HOST: 239.255.255.250:1900\n" +// "MAN: \"ssdp:discover\"\n" +// "MX: 1\n" +// "ST: urn:dial-multiscreen-org:service:dial:1\n" +// "USER-AGENT: Microsoft Edge/128.0.2739.42 Windows\n";//用于发送的字符串 try{ InetAddress adds = InetAddress.getByName(host); DatagramSocket socket = new DatagramSocket(); DatagramPacket dp = new DatagramPacket(uUIdMessage.getBytes(), uUIdMessage.length(), adds, port); socket.send(dp);// DatagramPacket dp = new DatagramPacket(message.getBytes(), message.length(), adds, port);// socket.send(dp);// ds.close(); // 1.创建一个接受端对象,注册端口 MulticastSocket multicastSocket = new MulticastSocket(37020); multicastSocket.joinGroup(new InetSocketAddress(InetAddress.getByName(host),37020), NetworkInterface.getByInetAddress(InetAddress.getLocalHost())); while (true) { //把当前接收端加入到一个组播中,绑定对应的组播消息IP// socket.joinGroup(InetAddress.getByName("224.0.1.1")); //新绑定方法 // 2.创建一个数据包对象,封装接受的数据 byte[] buffer=new byte[1024*64]; DatagramPacket packet=new DatagramPacket(buffer,buffer.length); //3.等待接收消息 socket.receive(packet); //4.打印接收的内容 int len=packet.getLength(); String rs=new String(buffer,0,len); System.out.println("收到了IP为:"+packet.getAddress()+"\n端口为:"+packet.getPort()+" 的消息"); System.out.println("消息内容:"+rs); } } catch (Exception e) { e.printStackTrace(); } // 确定要监听的广播组和端口 }}
wireshark已经获取到了海康相机返回的包
idea中执行结果为
标签: #java 海康威视