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

网站建设连接数据库我赢职场wordpress

网站建设连接数据库,我赢职场wordpress,深圳设计公司名字,关于电商的电影或者电视剧在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/403638.html

相关文章:

  • TDengine 聚合函数 ELAPSED 用户手册
  • Android音频学习(二十)——高通HAL
  • C#练习题——Lambad表达式的应用
  • Polar WEB(1-20)
  • 湖州做网站公司哪家好温州市网站制作公司
  • NW973NW976美光固态闪存NW982NW987
  • 软件测试 - 接口测试(中篇)
  • 项目进不了index.php,访问public下的html文件可以进去
  • 得力D31系列M2500 M3100 ADNW激光打印机维修手册
  • 信誉好的东莞网站推广从网站验证码谈用户体验
  • Spring Boot中Bean Validation的groups属性深度解析
  • Linux进程(2)
  • C++:String类
  • 金华网站开发杭州自适应网站建设
  • ROS (无人机、机器人)与外部系统对接
  • 苏州市吴江住房和城乡建设局网站书籍网站设计
  • Pytorch工具箱2
  • 物业网站开发wordpress英文博客模板下载
  • 光影(1)
  • iOS 混淆与机器学习模型保护 在移动端保密权重与推理逻辑的实战指南(iOS 混淆、模型加密、ipa 加固)
  • Axios的快速入门
  • 网站建设品牌公司排名网页游戏4399在线游戏
  • 木渎建设局网站哪个网站可以做加工代理的
  • 培训班小程序模板如何一键套用,分享微信小程序的制作方法
  • 陕西做天然气公司网站网站如何做的有特色
  • 娱乐网站的代理怎么做WordPress 短码转换
  • Unity - Spine
  • Spring依赖注入方式
  • 宏升温岭网站建设扁平化网站源码
  • 网站页面架构图网站定制开发 广州