dxt_1515 2016-06-21 01:57 采纳率: 25%
浏览 1615

JAVA UDP通信为什么只能接收一次数据,我想要时刻接收数据,并更新UI,大神们帮我看看程序吧?

// 与UDP数据接收线程通信更新UI线程中EditText控件中的内容
receiveHandler = new Handler() {
public void handleMessage(Message msg) {
point2.setText(receiveInfo);

        }
    };
}

// UDP数据接收线程
public class udpReceiveThread extends Thread {
@Override
public void run() {
try {
socket = new DatagramSocket(8081);
listenStatus = true;
while (listenStatus)
{
// byte[] inBuf= new byte[1024];
byte[] inBuf = new byte[1024];
DatagramPacket inPacket = new DatagramPacket(inBuf,
inBuf.length);
socket.receive(inPacket);
String str = new String(inPacket.getData());
receiveInfo = Change1(str, inPacket.getLength()).trim();

            //  receiveInfo = new String (inPacket.getData());  
                // receiveInfo= stringtopoint(inBuf,inPacket.getLength());
                socket.close();
                Message msg = new Message();
                receiveHandler.sendMessage(msg);
                try {Thread.sleep(100);

                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            // TODO Auto-generated catch block
        }
    }

}

// 发送按钮单击事件
public void SendButtonClick(View source) {
    new udpSendThread().start();
}

// 监听按钮点击事件
public void ListenButtonClick(View source) {
    if (listenStatus == false) {
        stop.setText("停止监听");
        new udpReceiveThread().start();
    } else {
        stop.setText("开始监听");
        socket.close();
        listenStatus = false;
        new udpReceiveThread().interrupt();
    }
}

// 数据处理

public static String Change1(String str, int len)
{

    if (str == null || str.equals("")) 
    {
        return null;
    }

    String hexString = str.replace(" ", "");
    String ret = "";
    char[] hexChars = hexString.toCharArray();
    for (int i = 0; i < hexChars.length; i++) 
    {

            if ((hexChars[i] == 'p') & (hexChars[i + 1] == '1')
                    & (hexChars[i + 2] == 'r') & (hexChars[i + 3] == '!')) 
            {
                String p = Integer
                        .toString((CharToHex(hexChars[i + 7]) << 12)
                                | (CharToHex(hexChars[i + 8]) << 8)
                                | (CharToHex(hexChars[i + 9]) << 4)
                                | CharToHex(hexChars[i + 10]));
                i=i+13;
                return p;
            } else 
            {   
                i=1+1;
            }
        }
    return null;

}

比如我发送了p1r!p1r003B1s!p1r!p1r001A1s!,程序只处理了p1r!p1r003B1s!这句话,把我需要的003B提取出来了,更新ui,为什么不能继续处理后面的数据,继续更新ui呢?请大神赐教!

  • 写回答

1条回答 默认 最新

  • dxt_1515 2016-06-21 03:44
    关注

    大神们快来看一下!是不是我的监听有问题呢,还是要把监听这个地方改一下!

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误