国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

安卓監(jiān)聽端口接收消息

這篇具有很好參考價(jià)值的文章主要介紹了安卓監(jiān)聽端口接收消息。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

其他文章

下面是我的另一篇文章,是在電腦上發(fā)送數(shù)據(jù),配合本篇文章,可以實(shí)現(xiàn)電腦與手機(jī)的局域網(wǎng)通訊。直接復(fù)制粘貼就能行,非常滴好用。
點(diǎn)擊連接
另外,如果你不知道你的手機(jī)ip,也可以通過如下文章獲取哦,這文章的是局域網(wǎng)IP,限于局域網(wǎng)測(cè)試。
點(diǎn)擊連接

監(jiān)聽端口

我們可以創(chuàng)建一個(gè)DatagramSocket對(duì)象,用于在指定的端口上接收UDP消息。

DatagramSocket是Java中用于進(jìn)行UDP通信的類,它代表一個(gè)數(shù)據(jù)報(bào)套接字。通過DatagramSocket對(duì)象,我們可以發(fā)送和接收UDP數(shù)據(jù)報(bào)。

示例代碼如下:

val udpSocket = DatagramSocket(port)

port變量是指定的端口號(hào),用于指定UDP套接字綁定的端口。創(chuàng)建的udpSocket對(duì)象將在目標(biāo)端口號(hào)上進(jìn)行監(jiān)聽,用于接收來自其他節(jié)點(diǎn)的UDP消息。

接收消息

一旦創(chuàng)建了DatagramSocket對(duì)象,就可以使用該對(duì)象的receive方法來接收UDP消息,并將接收到的數(shù)據(jù)存儲(chǔ)在一個(gè)DatagramPacket對(duì)象中,然后通過解析DatagramPacket對(duì)象來獲取實(shí)際的消息內(nèi)容。
示例代碼如下:

val buffer = ByteArray(1024)
val packet = DatagramPacket(buffer, buffer.size)
udpSocket.receive(packet)

接收到消息后,就可以進(jìn)行相應(yīng)的處理操作,比如更新UI等。

建立新線程

在Android開發(fā)中,主線程(也稱為UI線程)負(fù)責(zé)處理用戶界面的更新和響應(yīng)用戶交互事件,包括處理用戶輸入、渲染界面等操作。如果在主線程中執(zhí)行耗時(shí)的操作,如網(wǎng)絡(luò)請(qǐng)求、文件讀寫等,會(huì)導(dǎo)致界面卡頓、無響應(yīng)或ANR錯(cuò)誤。

為避免這種情況,在執(zhí)行網(wǎng)絡(luò)數(shù)據(jù)的接收操作時(shí),需要使用Thread來創(chuàng)建一個(gè)新的線程。將耗時(shí)的操作放在新的線程中執(zhí)行,保持主線程的響應(yīng)性。這樣,主線程仍然可以繼續(xù)處理用戶界面的更新和事件,而不會(huì)因?yàn)樽枞诮邮障⒉僮魃隙a(chǎn)生卡頓或無響應(yīng)的情況。

開啟新線程,首先創(chuàng)建一個(gè)Thread對(duì)象,并傳入一個(gè)Runnable對(duì)象作為參數(shù)。Runnable對(duì)象定義了線程要執(zhí)行的操作。
示例代碼如下:

val receiveThread = Thread(Runnable {
})

在線程中,我們可以通過Thread.currentThread()方法獲得當(dāng)前執(zhí)行的線程對(duì)象。
而通過線程對(duì)象的isInterrupted()方法可以檢查當(dāng)前線程是否被中斷。如果線程被中斷,isInterrupted()方法會(huì)返回true,否則返回false。
如此一來,我們可以在線程中通過一個(gè)循環(huán),來不斷的接收數(shù)據(jù)。
示例代碼如下:

while (!Thread.currentThread().isInterrupted) {
}

循環(huán)條件表示當(dāng)當(dāng)前線程不被中斷時(shí)執(zhí)行循環(huán)體內(nèi)的代碼。這樣程序就在后臺(tái)線程中執(zhí)行持續(xù)性的任務(wù),直到線程被中斷或任務(wù)完成才退出循環(huán)。

當(dāng)然了,要在循環(huán)體內(nèi)部結(jié)束循環(huán)的話,只要執(zhí)行Thread.currentThread().interrupt()方法即可,該方法會(huì)中斷當(dāng)前線程。然后isInterrupted()方法將會(huì)返回true,循環(huán)條件將不再滿足,從而退出循環(huán)。這可以用來停止線程的執(zhí)行并終止循環(huán)。

最后我們得到如下代碼:

val receiveThread = Thread(Runnable {
    val udpSocket = DatagramSocket(port)
    val buffer = ByteArray(1024)
    val packet = DatagramPacket(buffer, buffer.size)

    while (!Thread.currentThread().isInterrupted) {
        try {
            udpSocket.receive(packet)
            val receivedData: String = String(packet.data, 0, packet.length)
            runOnUiThread {
                updateReceivedMessage(receivedData)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
    udpSocket.disconnect()
    udpSocket.close()
})

在Runnable對(duì)象的run方法中,我們創(chuàng)建了一個(gè)DatagramSocket對(duì)象,并指定了要監(jiān)聽的端口號(hào)。然后我們創(chuàng)建了一個(gè)字節(jié)數(shù)組buffer以及一個(gè)DatagramPacket對(duì)象packet,用于接收UDP數(shù)據(jù)。
在循環(huán)中,我們使用udpSocket.receive(packet)方法來接收數(shù)據(jù)。一旦有數(shù)據(jù)到達(dá),receive方法會(huì)阻塞,直到數(shù)據(jù)到達(dá)或者發(fā)生異常。當(dāng)數(shù)據(jù)到達(dá)后,使用packet對(duì)象從接收到的數(shù)據(jù)中提取字符串,并調(diào)用runOnUiThread方法來在UI線程中更新界面上的receivedMessageTextView的文本內(nèi)容,顯示接收到的消息。

在循環(huán)結(jié)束后,記得關(guān)閉udpSocket連接。文章來源地址http://www.zghlxwxcb.cn/news/detail-660664.html

完整代碼

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

class MainActivity : AppCompatActivity() {
    private val port = 8888

    private lateinit var receivedMessageTextView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        receivedMessageTextView = findViewById(R.id.tv_received_message)

        val receiveThread = Thread(Runnable {
            val udpSocket = DatagramSocket(port)
            val buffer = ByteArray(1024)
            val packet = DatagramPacket(buffer, buffer.size)

            while (!Thread.currentThread().isInterrupted) {
                try {
                    udpSocket.receive(packet)
                    val receivedData: String = String(packet.data, 0, packet.length)
                    runOnUiThread {
                        updateReceivedMessage(receivedData)
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }
            udpSocket.disconnect()
            udpSocket.close()
        })

        receiveThread.start()
    }

    private fun updateReceivedMessage(message: String) {
        receivedMessageTextView.text = message
    }
}

到了這里,關(guān)于安卓監(jiān)聽端口接收消息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【微信小程序】使用 WebSocket 進(jìn)行訂閱操作、連接監(jiān)聽、接收到服務(wù)器的消息事件

    在微信小程序中使用 WebSocket 進(jìn)行訂閱操作,可以通過 wx.connectSocket 方法創(chuàng)建 WebSocket 連接,并通過相關(guān)事件處理函數(shù)進(jìn)行訂閱和數(shù)據(jù)處理。 以下是一個(gè)示例代碼,演示了在微信小程序中使用 WebSocket 進(jìn)行訂閱: 在上述代碼中,我們首先使用 wx.connectSocket 方法創(chuàng)建 WebSocket 連接

    2024年02月16日
    瀏覽(49)
  • 利用消息中間件RabbitMQ創(chuàng)建隊(duì)列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機(jī)來完成消息的發(fā)送和監(jiān)聽接收(完整版)

    利用消息中間件RabbitMQ創(chuàng)建隊(duì)列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機(jī)來完成消息的發(fā)送和監(jiān)聽接收(完整版)

    目錄 一、前期項(xiàng)目環(huán)境準(zhǔn)備 1.1父項(xiàng)目以及子項(xiàng)目 1.2配置pom.xml 1.3配置application.yml 二、扇出(Fanout)?交換機(jī)實(shí)現(xiàn)消息的發(fā)送和接收 2.1編寫子項(xiàng)目consumer(消費(fèi)者,接收消息)的代碼實(shí)現(xiàn)扇出(Fanout)交換機(jī)接收消息 2.1.1consumer子項(xiàng)目結(jié)構(gòu) 2.1.2FanoutConfig類的實(shí)現(xiàn)扇出(Fanout)交

    2024年02月05日
    瀏覽(95)
  • Android 鍵盤監(jiān)聽 鍵盤展開/收起監(jiān)聽

    Android 鍵盤的展開與收起一直是個(gè)很遭人詬病的東西 方法各式各樣都有,但是基本都不是很好用,有各種限制 這里編寫了一個(gè)優(yōu)雅地實(shí)現(xiàn)方式,利用屏幕實(shí)際高度與顯示區(qū)域的高度對(duì)比可以優(yōu)雅地判斷出是否彈出鍵盤. 眾所周知鍵盤是會(huì)侵占實(shí)際應(yīng)用的顯示區(qū)域,導(dǎo)致實(shí)際顯示區(qū)域

    2024年02月12日
    瀏覽(21)
  • Android手勢(shì)監(jiān)聽、觸摸監(jiān)聽器、onTouchListener

    一次點(diǎn)擊事件(onClickListener)由 一次down事件,多次move事件和一次up事件構(gòu)成,move事件出現(xiàn)的次數(shù)由用戶的按壓效果決定。down表示手勢(shì)事件開始,up表示結(jié)束,move則代表著過程。此時(shí)代碼中onTouchLishtener方法中返回的結(jié)果為ture,則表示攔截用戶的該次行為,由此方法進(jìn)行處理

    2024年02月04日
    瀏覽(27)
  • Android 藍(lán)牙狀態(tài)的監(jiān)聽

    客戶在使用我公司的Flutter插件時(shí),要求有一個(gè)藍(lán)牙與設(shè)備重連的功能,我用公司提供的Android SDK只能實(shí)現(xiàn)超出和進(jìn)入藍(lán)牙范圍進(jìn)行重連,但是無法在藍(lán)牙打開進(jìn)行重連,這不得不讓我使用Android手寫一個(gè)廣播監(jiān)聽。 1. 添加權(quán)限 2. 創(chuàng)建一個(gè)類繼承 BroadcastReceiver 3. 動(dòng)態(tài)注冊(cè)和注銷

    2024年02月10日
    瀏覽(26)
  • Android 監(jiān)聽音頻焦點(diǎn)變化

    在 Android 中,監(jiān)聽音頻焦點(diǎn)變化意味著您可以獲得關(guān)于音頻焦點(diǎn)狀態(tài)的通知,并針對(duì)焦點(diǎn)變化執(zhí)行相應(yīng)的操作。音頻焦點(diǎn)是指哪個(gè)應(yīng)用程序或組件有權(quán)播放音頻的能力。 通過監(jiān)聽音頻焦點(diǎn)變化,您可以根據(jù)不同的焦點(diǎn)狀態(tài)進(jìn)行適當(dāng)?shù)囊纛l處理,以提供更好的用戶體驗(yàn)和避免音

    2024年04月26日
    瀏覽(43)
  • Android監(jiān)聽手機(jī)短信

    Android監(jiān)聽手機(jī)短信的方法有兩種,分別為: 1、接受系統(tǒng)的短信廣播:當(dāng)手機(jī)收到新消息時(shí),會(huì)發(fā)送一條廣播,通過該廣播就可以獲取短信內(nèi)容; 2、監(jiān)聽短信數(shù)據(jù)庫:利用 觀察者模式 監(jiān)聽短信數(shù)據(jù)庫,當(dāng)短信數(shù)據(jù)庫改變時(shí)就可以觸發(fā)觀察者模式的onChange()方法,但是onChang回

    2024年02月11日
    瀏覽(16)
  • Android 回退鍵監(jiān)聽

    方法1:回調(diào)方法onBackPressed 這個(gè)方法是監(jiān)聽按鍵事件,但是阻止用戶的行為,并且這種方法監(jiān)聽不到Home鍵的事件。 方法3:回調(diào)方法dispatchKeyEvent 當(dāng)你的onBackPressed和onKeyDown失效時(shí)可以使用,dispatchKeyEvent(onBackPressed和onKeyDown失效時(shí)應(yīng)該是activity里面嵌套了webview控件什么的) 這

    2024年02月11日
    瀏覽(12)
  • Android監(jiān)聽事件

    ?監(jiān)聽事件機(jī)制由事件源,事件和事件監(jiān)聽器三類對(duì)象組成,事件源一般就是activity中的UI控件。 下面引用別人整理的圖來更加形象的表達(dá)這些關(guān)系。 ?事件監(jiān)聽機(jī)制的意義就是讓事件源的行為委托給事件監(jiān)聽器,讓監(jiān)聽器控制事件的發(fā)生。 ? 通過內(nèi)部類實(shí)現(xiàn) 通過匿名內(nèi)部

    2023年04月26日
    瀏覽(17)
  • Android 監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化

    Android 監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化

    此篇存在的主要意義在于解決用戶使用app中網(wǎng)絡(luò)狀態(tài)發(fā)生了變化,需要我們?nèi)?dòng)態(tài)監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)(有網(wǎng)、無網(wǎng))、網(wǎng)絡(luò)類型 (包括wifi、移動(dòng)網(wǎng)絡(luò) - 3G、4G等等) 門前授課 關(guān)于網(wǎng)絡(luò)狀態(tài)的監(jiān)聽,主要是基于 Android 廣播 - BroadcaseReceiver組件 ~ 同時(shí)關(guān)于廣播的注冊(cè)方面,從An

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包