電容器的 UDP 插件靈感來自 cordova-plugin-chrome-apps-sockets-udp!同時支援IPv6和IPv4,組播和廣播!
如需調試,請查看使用此外掛程式開發的 Udper 應用程式! https://play.google.com/store/apps/details?id=xyz.chenzhongkai.udper&hl=en_US
使用電容器,可以編寫以下程式碼:
async function process ( ) {
try {
await UdpPlugin . closeAllSockets ( ) ;
let info = await UdpPlugin . create ( ) ;
await UdpPlugin . bind ( { socketId : info . socketId , port : 5500 } )
await UdpPlugin . send ( { socketId : info . socketId , address : targetAddress , port : 6000 , buffer : UdpPluginUtils . bufferToString ( data ) } ) } )
} catch {
//........
}
}
是不是很神奇!
$ npm install capacitor-udp
對於android開發,不要忘記在MainActivity中添加插件類別!
declare module '@capacitor/core'
有時無法如預期般工作。我想像更改 core-plugin-definitions.ts 這樣的髒解決方案可能是最值得信賴的解決方案。
例如,
import { Plugin , PluginListenerHandle } from './definitions' ;
import { IUdpPlugin } from "capacitor-udp"
export interface PluginRegistry {
Accessibility: AccessibilityPlugin ;
App: AppPlugin ;
BackgroundTask: BackgroundTaskPlugin ;
Browser: BrowserPlugin ;
// .............
UdpPlugin: IUdpPlugin ;
[ pluginName : string ] : {
[ prop : string ] : any ;
} ;
}
import { Plugins } from "@capacitor/core" ;
const { UdpPlugin } = Plugins ;
import { UdpPluginUtils } from "capacitor-udp" ; // if you want support for converting between ArrayBuffer and String
對於智慧感知或打字稿,您可能需要編輯 @capacitor/core/dist/esm/core-plugin-definitions.ts 中的檔案。確保該檔案已實際加載,因為可能還有其他 node_modules 資料夾。
該api在某種程度上類似於Chrome UDP API,但具有電容器的味道!
活動:
為udp建立一個socket,並且可以建立多個透過socket id區分的socket。
UdpPlugin . create ( { properties : { name : "yourSocketName" , bufferSize : 2048 } } ) . then ( res => { socketId = res . socketId } ) ;
更新套接字訊息,包括套接字名稱和緩衝區大小。
UdpPlugin . update ( { socketId : yourSocketId , properties : { name : "socketname" , bufferSize : 2048 } } )
在發送和接收資料之前,您需要綁定套接字。
UdpPlugin . bind ( { socketId : yourSocketId , port : 5000 } )
Capacitor暫時不支援Arraybuffer,所以我需要將ArrayBuffer轉換為base64字串。我提供了一個 util 函數來幫助您實現這一目標!
UdpPlugin . send ( { socketId : yourSocketId , address : targetAddress , port : 6000 , buffer : bufferString } ) // bufferString is of type string
UdpPlugin . send ( { socketId : yourSocketId , address : targetAddress , port : 6000 , buffer : UdpPluginUtils . bufferToString ( data ) } ) // data is of type ArrayBuffer
關閉一個套接字
UdpPlugin . close ( { socketId : yourSocketId } )
UdpPlugin . closeAllSockets ( )
啟用廣播後,您可以發送目標位址為255.255.255.255的資料。
UdpPlugin . setBroadcast ( { socketId : yourSocketId , enabled : enableBroadcastOrNot } )
取得所有可用的套接字。
UdpPlugin . getSockets ( ) . then ( res => {
//res contains sockets...
} )
加入特定的群組地址。對於 IPv4,它類似於“238.12.12.12”。對於 IPv6,它類似於“ff02::08”。
UdpPlugin . joinGroup ( { socketId : yourSocketId , address : multicastAddress } )
UdpPlugin . leaveGroup ( { socketId : yourSocketId , address : multicastAddress } )
UdpPlugin . getJoinedGroups ( { socketId : yourSocketId } ) . then ( res => {
// res contains your group addresses
} )
暫停接收資料。
UdpPlugin . setPaused ( { socketId : yourSocketId , paused : pauseOrNot } )
UdpPlugin . setMulticastLoopbackMode ( { socketId : yourSocketId , enabled : enabledOrNot } )
UdpPlugin . addListener ( "receive" , data => {
yourArrayBuffer = UdpPluginUtils . stringToBuffer ( data )
} } ) ;
對於ArrayBuffer的理解,可以參考Typed Arrays
UdpPlugin . addListener ( "receiveError" , error => { console . log ( error ) } ) ;