最近在用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測驗工具,電腦端的資料是發過來了的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/126712.html
標籤:Android
