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

软件商店vivo官方下载/怎么给网站做优化

软件商店vivo官方下载,怎么给网站做优化,网站内容建设平面设计,襄阳做网站1、最近作项目,须要使用socket作一个常链接,实现实时通讯,可是需求是在同一个wifi环境下,ip地址是动态获取的,这样就形成了服务端地址的不肯定性。解决这个问题的关键就是如何拿到服务端的Ip。咱们能够这样想&#xff…

1、最近作项目,须要使用socket作一个常链接,实现实时通讯,可是需求是在同一个wifi环境下,ip地址是动态获取的,这样就形成了服务端地址的不肯定性。解决这个问题的关键就是如何拿到服务端的Ip。咱们能够这样想,服务端能够在得到ip之后经过一种方式把这个地址告诉客户端。这样咱们就注意到UDP多点广播是一个好的解决方法。html

要使用多点广播,须要让一个数据报标有一组目标主机地址,其思想是设置一组特殊网络地址做为多点广播地址,第一个多点广播地址都被看做是一个组,当客户端须要发送、接收广播信息时,加入该组就能够了。IP协议为多点广播提供这批特殊的IP地址,这些IP地址范围是224.0.0.0---239.255.255.255,其中224.0.0.0为系统自用。在java中须要用到MulticastSocket这个类。java

其主要思路就是虚拟一个网络组,只要注册加入这个组的客户端均可以接收到广播者发送的数据。缓存

1、建立一个MulticastSocket类,端口号自定义,可是每一个接收者的端口号要与这个一致网络

mSocket=newMulticastSocket(BROADCAST_PORT);socket

二、虚拟一个多点广播地址,224.0.0.1--239.255.255.255任选。ide

address= InetAddress.getByName(BROADCAST_IP);this

三、创建须要发送出去的数据,自定义的,xxxx是确认信息,还包括局域网ip和socket端口号,为创建socket作准备。spa

sendData= ("xxxx"+"-"+ ip +"-"+ port).getBytes();线程

3、建立一个DatagramPacket对象,包括须要发送的数据,广播地址和端口号code

dataPacket=newDatagramPacket(sendData,sendData.length,address,

BROADCAST_PORT);

四、将该MulticastSocket对象加入到指定的多点广播地址

mSocket.joinGroup(address);//加入广播接收组

五、设置广播生存时间0-255

mSocket.setTimeToLive(1);

6.  使用MulticastSocket对象的send方法 发送数据

mSocket.send(dataPacket);

7.  不接收广播的时候调用leaveGroup方法

mSocket.leaveGroup(address);

八、接收端udp的建立过程与发送端基本一致

九、接收端使用mSocket.receive(dataPacket)接收数据,dataPacket是DatagramPacket对象

由于个人项目中有一端是插电源的设备,因此我把耗电的这端做为服务端,而后每隔5秒向外发送一次广播,只要在同wifi环境下,客户端能够随时链接服务端。

2、代码

1、服务端代码UDPSocketBroadCast类

private static final String BROADCAST_IP = "224.224.224.225";

private static final int BROADCAST_PORT = 8681;

private static byte[] sendData;

private boolean isStop = false;

private static UDPSocketBroadCast broadCast = new UDPSocketBroadCast();

private MulticastSocket mSocket = null;

private InetAddress address = null;

private DatagramPacket dataPacket;

private UDPSocketBroadCast() {

}

/**

* 单例

*

* @return

*/

public static UDPSocketBroadCast getInstance() {

if (broadCast == null) {

broadCast = new UDPSocketBroadCast();

}

return broadCast;

}

/**

* 开始发送广播

*

* @param ip

*/

public void startUDP(String ip, int port) {

sendData = ("xxxx" + "-" + ip + "-" + port).getBytes();

ShowLogManager.outputDebug("tag", ip+";"+port);

new Thread(UDPRunning).start();

}

/**

* 中止广播

*/

public void stopUDP() {

isStop = true;

destroy();

}

/**

* 销毁缓存的数据

*/

public void destroy() {

broadCast = null;

mSocket = null;

address = null;

dataPacket = null;

sendData = null;

}

/**

* 建立udp数据

*/

private void CreateUDP() {

try {

mSocket = new MulticastSocket(BROADCAST_PORT);

mSocket.setTimeToLive(1);// 广播生存时间0-255

address = InetAddress.getByName(BROADCAST_IP);

mSocket.joinGroup(address);//加入广播接收组

dataPacket = new DatagramPacket(sendData, sendData.length, address,

BROADCAST_PORT);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 5秒发送一次广播

*/

private Runnable UDPRunning = new Runnable() {

@Override

public void run() {

while (!isStop) {

if (mSocket != null) {

try {

mSocket.send(dataPacket);

Thread.sleep(5 * 1000);// 发送一次停5秒

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

} else {

CreateUDP();

}

}

}

};

二、客户端代码

private final String BROADCAST_IP = "224.224.224.225";

private final int BROADCAST_PORT = 8681;

private byte[] getData = new byte[1024];

private boolean isStop = false;

private MulticastSocket mSocket = null;

private InetAddress address = null;

private DatagramPacket dataPacket;

private Thread mUDPThread = null;

private UDPDataCallBack mCallBack = null;

/**

* 开始接收广播

*

* @param ip

*/

public void startUDP(UDPDataCallBack mCallBack) {

this.mCallBack = mCallBack;

mUDPThread = new Thread(UDPRunning);

mUDPThread.start();

}

/**

* 中止广播

*/

public void stopUDP() {

mSocket.leaveGroup(address);

isStop = true;

mUDPThread.interrupt();

}

/**

* 建立udp数据

*/

private void CreateUDP() {

try {

mSocket = new MulticastSocket(BROADCAST_PORT);

mSocket.setTimeToLive(1);// 广播生存时间0-255

address = InetAddress.getByName(BROADCAST_IP);

mSocket.joinGroup(address);

dataPacket = new DatagramPacket(getData, getData.length, address,

BROADCAST_PORT);

Log.d("tag", "udp is create");

} catch (IOException e) {

e.printStackTrace();

}

}

private Runnable UDPRunning = new Runnable() {

final Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

String result = (String) msg.obj;

mCallBack.mCallback(result);

Log.d("tag", "handler get data:" + result);

}

};

@Override

public void run() {

CreateUDP();

Message msg = handler.obtainMessage();

while (!isStop) {

if (mSocket != null) {

try {

mSocket.receive(dataPacket);

String mUDPData = new String(getData, 0,

dataPacket.getLength());

/**

* 肯定是不是这个客户端发过来的数据

*/

if (mUDPData != null

&& "xxxx".equals(mUDPData

.split("-")[0])) {

msg.obj = mUDPData;

handler.sendMessage(msg);

isStop = true;

}

} catch (IOException e) {

e.printStackTrace();

}

} else {

msg.obj = "error";

handler.sendMessage(msg);

}

}

}

};

public interface UDPDataCallBack {

public void mCallback(String str);

}

客户端在接收到服务端发来的udp广播后会退出接收广播,而后启动另外一个线程建立socket,因此我在代码中使用handler和回调方法,将接收到的广播信息传递给建立socket的方法。

http://www.jmfq.cn/news/5210623.html

相关文章:

  • 江门网站建设套餐/百度搜索关键词
  • 深圳市国外网站建设服务机构/营销失败案例分析
  • 阳江网站建设公司/重庆网站seo外包
  • 室内设计网站参考/互联网优化是什么意思
  • 做网站后用浏览量百度给钱/设计网页
  • 网站 建设 价格表/寻找客户的12种方法
  • 做外贸网站赚钱吗/青岛关键词排名提升
  • 权威发布公众号封面/枫林seo工具
  • 南京建设银行公积金查询网站/全网引流推广 价格
  • 网站备案 营业执照/交换友情链接
  • 大兴模版网站开发公司哪家好/北京seo服务商
  • 在线销售网站设计文献/郑州官网网络营销外包
  • 导购网站免费推广/军事新闻俄乌最新消息
  • 网站建设兼容移动端/免费大数据网站
  • 系统 网站开发工程师/产品推广怎么做
  • 浙江建站/兰州网站seo诊断
  • 人是用什么做的视频网站吗/优化大师官网下载
  • 西安关键词网站排名/百度信息流效果怎么样
  • 一个人能建设一个公司网站吗/百度小说排行榜2020前十名
  • 外贸先做网站还是开公司/宁波seo排名外包
  • 湖南省军区强军网网站群建设项目6/如何快速提升网站关键词排名
  • 织梦网站建设交流群/服务网站排名咨询
  • 网站地图制作怎么做/网站优化排名软件网
  • 网站做友情链接的用途/西安百度爱采购推广
  • 为什么做织梦网站时图片出不来/网络推广教程
  • 响应式网站建设品牌全网天下/seo快排优化
  • 静态网页怎么做网站/如何制作一个网页网站
  • mip织梦手机网站模板/客服外包平台
  • 营销活动网站/杭州seo优化
  • 什么专业可以做网站/seo怎么做优化方案