Android开发——定位udp开发时反馈字符串出错问题
来源:互联网 发布:mac版latex使用教程 编辑:程序博客网 时间:2024/06/16 05:44
Android开发——定位udp开发时反馈字符串出错问题
设计了一个客户端用upd传递数据的开关switch,服务器接收udp包后获取其中字符串,然后把这个字符串反馈给客户端。
【问题现象】:开关开时传送turn on the light 1,接到反馈相同没有问题;关闭时传送turn off the light 1,也接收到正常反馈,没有问题;但是在次打开开关时,反馈的却是turn on the light 11最后多了一个1。
【问题分析】:开始时怀疑负责显示的组件没有清空原来的字符串,但是后来排除了,发现接收的反馈字符串本身有问题。
排查服务器程序的时候,发现负责接收udp包中的字节数组的byte[] bt是在while循环之前定义的,while循环每一次接收到udp包时,都是把其中的byte[]写到bt中,这种写法可能不是清空后写,而是从前往后覆盖bt中的字节单元,覆盖不到的就会保留在bt中这样导致原来残留的‘1’还存在。
【问题解决】:把byte[] bt放到while监听循环中。这样可以解决这个问题,但是不断new出新的对象会导致内存浪费,虽然java有内存回收机制,但是不知道效果可不可靠。
说起来容易,定位起来还是不容易的啊,花了将近一个小时时间。
package com.leo;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class SimpleSever{public static void main(String[] args) throws IOException{DatagramSocket ds = new DatagramSocket(30000);while (true){ //下面两行本来在循环外,就是这样出错的,现已改正byte[] byt = new byte[100];DatagramPacket packet = new DatagramPacket(byt, byt.length);ds.receive(packet);//要收的信息已经放在byt中了,下面想怎么处理自己决定System.out.println(byt.toString());System.out.println(new String(packet.getData(), 0, packet.getLength()));for (int i = 0; i < 2; i++){//反馈一下收到了,没收到就不用反馈了正常状态就是没收到//反馈两次是防止已经打开电器但是手机没有收到反馈二再操作一次//手机只要收到一次反馈就不用抛异常,如果超时就要抛异常byte[] byt2 = "This is a reaction.".getBytes();DatagramPacket packet2 = new DatagramPacket(byt, byt.length,//InetAddress.getByName("127.0.0.1"),InetAddress.getByName("192.168.1.108"),packet.getPort());ds.send(packet2);}}}}
- Android开发——定位udp开发时反馈字符串出错问题
- iOS开发怎么定位问题出错的代码位置
- Android开发——GPS定位
- Android开发导入APIDemos出错的问题
- Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
- Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
- Android开发中字符串比较,新手容易出错
- Android开发中字符串比较,新手容易出错
- Android开发---GPS定位
- Android开发之定位
- Android开发—智能家居系列----UDP通信发送指令
- IOS开发—系统定位
- Android版本百度地图开发(四)——定位
- Android版本百度地图开发(四)——定位
- android百度地图开发——定位sdk
- Android开发教程--关于LayoutParams removeRule出错问题的解决
- Android 开发TCP、UdP客户端
- Android 开发TCP、UdP客户端
- Dreamweaver 网页调试设置。
- Android中Service类onStartCommand
- H.264 视频 RTP 负载格式
- Java基础班第七天笔记
- 参数saveInsanceState
- Android开发——定位udp开发时反馈字符串出错问题
- Java基础班第八天笔记
- Android Out Of Memory(OOM) 的详细研究
- Ubuntu下 ssh : connect to host localhost port 22:Connection refused
- 第一次C程序设计上机报告
- NYOJ - A-B Problem
- SWT:文本框
- 测试从零开始(二)白盒测试
- 一些硬件设计经验