cordova-plugin-chrome-apps-sockets-udp에서 영감을 받은 커패시터용 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
Intellisense 또는 TypeScript의 경우 @capacitor/core/dist/esm/core-plugin-definitions.ts에서 파일을 편집해야 할 수도 있습니다. 다른 node_modules 폴더가 있을 수 있으므로 이 파일이 실제로 로드되었는지 확인하세요.
API는 Chrome UDP API와 어느 정도 유사하지만 커패시터의 맛이 있습니다!
이벤트:
UDP용 소켓을 생성하고, 소켓 ID로 구별되는 소켓을 두 개 이상 생성할 수 있습니다.
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 문자열로 변환해야 합니다. 이를 달성하는 데 도움이 되는 유틸리티 기능을 제공했습니다!
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 ) } ) ;