我的android studio UDP怎么收不到PC发送过来的信息

zhou_1965 2019-07-21 07:11:16
最近在用android studio写一个排队叫号系统,电通过UDP协议传一个字符串到安卓平板电脑上,平板电脑接收后显示出。但在调试中安卓中始终接收不到数据,请各位大侠指点:
主界面就只有一个文本,用于显示接收到的信息。


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>



MainActivity文件如下:
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private final static int RECEIVE_PORT = 5200; //接收端口号
private boolean listenStatus = true; //接收线程的循环标识
private byte[] receiveInfo; //接收报文信息
private ReceiveHandler receiveHandler = new ReceiveHandler();
private TextView tvMessage; //显示接收到的信息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//进入Activity时开启接收报文线程
new UdpReceiveThread().start();
tvMessage = (TextView) findViewById(R.id.tv1);
}

class ReceiveHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
tvMessage.setText("接收到数据了" + receiveInfo.toString());
}
}

/* UDP数据接收线程 * */
public class UdpReceiveThread extends Thread
{
@Override
public void run()
{
//super.run();
try
{
while(listenStatus)
{
DatagramSocket receiveSocket = new DatagramSocket(5200);
byte data[]= new byte[1024];
DatagramPacket inPacket=new DatagramPacket(data,data.length);
receiveSocket.receive(inPacket); //阻塞式,接收发送方的 inPacket
//tvMessage.setText("111");
receiveInfo = inPacket.getData();
receiveHandler.sendEmptyMessage(1);
//receiveSocket.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}

}

我在 receiveSocket.receive(inPacket); 语句之前加上tvMessage.setText("111");就能加上显示‘111’,在它之后加上就不能
显示出来,可能就在这里出问题了。我使用UDP测试工具,电脑端的数据是发过来了的。
...全文
179 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧