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

网站建设连接数据库佛山市桂城建设局网站

网站建设连接数据库,佛山市桂城建设局网站,贵阳银行手机银行下载安装,百度的营销推广模式在Android中,UDP广播和监听可以通过DatagramSocket和DatagramPacket来实现。UDP广播允许你将数据包发送到网络中的所有设备,而监听则允许你接收这些广播数据包。 1. 发送UDP广播 要发送UDP广播,你需要创建一个DatagramSocket,并使…

在Android中,UDP广播和监听可以通过DatagramSocket和DatagramPacket来实现。UDP广播允许你将数据包发送到网络中的所有设备,而监听则允许你接收这些广播数据包。

1. 发送UDP广播
要发送UDP广播,你需要创建一个DatagramSocket,并使用DatagramPacket来封装要发送的数据。广播地址通常是255.255.255.255,或者子网广播地址(如192.168.1.255)。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class UdpBroadcastSender {private static final ExecutorService executorService = Executors.newCachedThreadPool();public static void sendBroadcast(String message, int port) {executorService.execute(() -> {DatagramSocket socket = null;try {// 创建DatagramSocketsocket = new DatagramSocket();socket.setBroadcast(true);// 将消息转换为字节数组byte[] sendData = message.getBytes();// 创建DatagramPacket,指定广播地址和端口DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("255.255.255.255"), port);// 发送数据包socket.send(sendPacket);System.out.println("Broadcast message sent to: 255.255.255.255:" + port);} catch (Exception e) {System.err.println("Failed to send broadcast: " + e.getMessage());} finally {// 确保socket关闭if (socket != null && !socket.isClosed()) {socket.close();}}});}public static void shutdown() {executorService.shutdown();}
}

2. 监听UDP广播
要监听UDP广播,你需要创建一个DatagramSocket并绑定到指定的端口。然后使用DatagramPacket来接收数据。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class UdpBroadcastReceiver {private static final ExecutorService executorService = Executors.newCachedThreadPool();private DatagramSocket socket;private boolean isListening = false;public void startListening(int port, BroadcastListener listener) {executorService.execute(() -> {try {// 创建DatagramSocket并绑定到指定端口socket = new DatagramSocket(port);byte[] receiveData = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);isListening = true;while (isListening) {// 接收数据包socket.receive(receivePacket);// 将接收到的数据转换为字符串String message = new String(receivePacket.getData(), 0, receivePacket.getLength());// 回调监听器if (listener != null) {String senderIp = receivePacket.getAddress().getHostAddress();listener.onBroadcastReceived(message, senderIp);}}} catch (Exception e) {System.err.println("UDP listening error: " + e.getMessage());} finally {stopListening();}});}public void stopListening() {isListening = false;if (socket != null && !socket.isClosed()) {socket.close();}}public static void shutdown() {executorService.shutdown();}// 定义回调接口public interface BroadcastListener {void onBroadcastReceived(String message, String senderIp);}
}

3. 在Android中使用

import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity implements UdpBroadcastReceiver.BroadcastListener {private static final int UDP_PORT = 8888; // 自定义端口private UdpBroadcastReceiver receiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化UDP广播接收器receiver = new UdpBroadcastReceiver();// 开始监听广播receiver.startListening(UDP_PORT, this);// 发送广播UdpBroadcastSender.sendBroadcast("Hello from Android!", UDP_PORT);}@Overridepublic void onBroadcastReceived(String message, String senderIp) {// 在主线程中更新UIrunOnUiThread(() -> {Log.d("UDP_BROADCAST", "Received: " + message + " from " + senderIp);});}@Overrideprotected void onDestroy() {super.onDestroy();// 停止监听并关闭线程池receiver.stopListening();UdpBroadcastSender.shutdown();UdpBroadcastReceiver.shutdown();}
}

总结:
线程池管理

使用ExecutorService管理线程,避免频繁创建和销毁线程。

通过shutdown()方法优雅地关闭线程池。

资源释放:

在finally块中确保DatagramSocket关闭,避免资源泄漏。

回调机制:

通过BroadcastListener接口实现回调,解耦接收逻辑和UI更新。

动态停止监听:

提供stopListening()方法,支持动态停止UDP监听。

异常处理:

捕获并记录异常,确保程序在出现错误时不会崩溃。

http://www.dtcms.com/a/616249.html

相关文章:

  • 不用备案的网站各种软件开发定制
  • 淮安做网站公司网页制作教程(第三版)
  • C语言在线编译器开发 | 提供高效编程体验与实时错误反馈
  • 上海网站建设021360怎么夸一个网站开发公司
  • 国外特效网站美团网站开发
  • 办个网站多少钱网站数据库迁移
  • 做网站的图片传进去很模糊flash属于网页制作平台吗
  • 附近做网站的公司在线制作国庆头像
  • LLM零样本提示技术:核心要点+实用提示示例
  • 定制型网站 成功案例网络搭建与维护是什么
  • 做零食的网站可以接单做网站的软件
  • 夹江企业网站建设报价wordpress 文章 图片 插件
  • 1m带宽做网站快不网站增加外链方法
  • 摄影网站哪个最好中国地图36个省的地图
  • 发布文章后马上更新网站主页网站建设时间计划书
  • 在上海做兼职在哪个网站西安市建设干部学校网站
  • wordpress建站显示网站图标中国电子商务网站
  • 汕头网站设计电话电子商务专业网站设计
  • 北京营销型网站定制wordpress收费采集
  • 网站支付可以做二清php网站建设实例
  • 网站空间购买价格二手房公司网站建设
  • 制作网站的app吗创客贴设计网站官网
  • 精准扶贫电商网站建设计划书如何创建一家自己的公司
  • x网站免费模板免费下载广州市住房和城乡建设厅网站
  • 网站建好了怎么做邮箱163登录
  • 南京哪个网站做物业贷多语言网站建设应注意哪些事项
  • 衡水做外贸网站广州力洋建设工程有限公司
  • 深圳市专业的做网站建设集团网站方案
  • 莲湖微网站建设成立公司的流程以及资料
  • 做网站和做软件哪个赚钱内容管理系统做网站