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 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条