XPlusUdpComm 가이드
이 화면은 XPlusUdpComm.ocx 컴포넌트에 대한 샘플 화면이다.
XPlusUdpComm.ocx 컴포넌트는 UDP 서버/클라이언트 소켓 기능을 제공하는 컴포넌트이다.
예시
화면 스크립트
function btnInitXPlusUdpSvrComm_on_mouseup(objInst)
{
var nRet;
var strLogDir = "C:\\xFrame\\log";
/**
* XPlusUdpComm 컴포넌트를 초기화한다.
* @param pLogDir 로그 저장 디렉토리
* @param pLogFilePrefix 로그 파일 이름
* @param pLogLevel 로그 레벨("DEBUG"<"INFO"<"WARN"<"ERROR")
* ("DEBUG"로 지정시에만 송수신 데이터 덤프 로그가 기록됨)
* @param nLogEncFlag 로그 파일 내용 암호화 여부
* @return
* 0 : OK
* 9 : Already Initialized
*/
nRet = objXPlusUdpSvrComm.innerctrl.InitXPlusUdpComm(strLogDir, "XPlusUdpSvrComm", "DEBUG", 0);
factory.consoleprint("InitXPlusUdpComm Return Value = " + nRet);
if (nRet != 0) {
screen.alert("InitXPlusUdpComm Fail, Error Code = " + nRet);
}
/**
* 소켓으로 데이터 송수신시 UTF8 형식으로 인코딩 처리 여부를 지정한다.
* @param nUtf8Flag UTF8 형식으로 인코딩 처리 플래그
* @return
* 0 : OK
* 9 : Not Initialized
*/
objXPlusUdpSvrComm.innerctrl.SetUtf8Flag(1);
}
function btnInitXPlusUdpCltComm_on_mouseup(objInst)
{
var nRet;
var strLogDir = "C:\\xFrame\\log";
nRet = objXPlusUdpCltComm.innerctrl.InitXPlusUdpComm(strLogDir, "XPlusUdpCltComm", "DEBUG", 0);
factory.consoleprint("InitXPlusUdpComm Return Value = " + nRet);
if(nRet != 0) {
screen.alert("InitXPlusUdpComm Fail, Error Code = " + nRet);
}
objXPlusUdpCltComm.innerctrl.SetUtf8Flag(1);
}
function btnOpenUdpSvrSocket_on_mouseup(objInst)
{
var nRet;
/**
* XPlusUdpComm 컴포넌트 UDP 소켓을 생성한다.
* @param nBindPortNo 포트 번호가 0인 경우에는 자동으로 할당된 포트를 사용하고, 0이 아닌 경우에는 지정한 포트를 사용하고,
* @return
* 0 : OK
* 1 : Can't Create UDP Socket
* 2 : Can't Attach Socket
* 3 : Can't Bind Socket
* 4 : Can't Get Local UDP Port No
* 9 : Not Initialized
*/
nRet = objXPlusUdpSvrComm.innerctrl.OpenSocket(fldUdpSvrPortNo.gettext());
factory.consoleprint("OpenSocket Return Value = " + nRet);
if(nRet != 0) {
screen.alert("OpenSocket Fail, Error Code = " + nRet);
}
}
function btnOpenUdpCltSocket_on_mouseup(objInst)
{
var nRet;
nRet = objXPlusUdpCltComm.innerctrl.OpenSocket(fldUdpCltPortNo.gettext());
factory.consoleprint("OpenSocket Return Value = " + nRet);
if(nRet != 0) {
screen.alert("OpenSocket Fail, Error Code = " + nRet);
return;
}
/**
* XPlusUdpComm 컴포넌트 UDP 소켓에 할당된 포트번호를 구한다.
* OpenSocket API 호출시 nBindPortNo 파라미터 값을 0으로 지정한 경우에 사용한다.
* @return 포트번호
* 0 : 오류발생
* >0 : 할당된 UDP 포트 번호
*/
fldUdpCltPortNo.settext(objXPlusUdpCltComm.innerctrl.GetPortNo());
fldReceiverPortNo1.settext(fldUdpCltPortNo.gettext());
}
function btnCloseUdpSvrSocket_on_mouseup(objInst)
{
/**
* XPlusUdpComm 컴포넌트 UDP 소켓을 닫는다.
*/
objXPlusUdpCltComm.innerctrl.CloseSocket();
}
function btnCloseUdpCltSocket_on_mouseup(objInst)
{
objXPlusUdpCltComm.innerctrl.CloseSocket();
}
function btnSendData1_on_mouseup(objInst)
{
var nRet;
/**
* XPlusUdpComm 컴포넌트 UDP 소켓을 통해서 데이터를 송신한다.
* @param pRemoteIpAdddr 데이터 수신 대상 IP 주소
* @param nRemotePortNo 데이터 수신 대상 UDP 포트 번호
* @param pData 송신 데이터
* @return
* 0 : Success
* 1 : Invalid Socket
* 2 : Invalid Port No
* 3 : Invalid Address
* 5 : Data Length is 0
* 5 : Send Fail
* 9 : Not Initialized
*/
nRet = objXPlusUdpSvrComm.innerctrl.SendData(fldReceiverIpAddr1.gettext(), fldReceiverPortNo1.gettext(), fldSendData1.gettext());
if (nRet != 0) {
screen.alert("SendData Fail, Error Code = " + nRet);
return;
}
}
function btnSendData2_on_mouseup(objInst)
{
var nRet;
nRet = objXPlusUdpCltComm.innerctrl.SendData(fldReceiverIpAddr2.gettext(), fldReceiverPortNo2.gettext(), fldSendData2.gettext());
if (nRet != 0) {
screen.alert("SendData Fail, Error Code = " + nRet);
return;
}
}
/**
* 데이터 수신 이벤트 처리
* @param objInst XPlusUdpComm 오브젝트
* @param nLength 수신한 데이터 길이
* @param pDataKey 수신한 데이터에 대한 Key값, GetData 함수에서 사용됨
* @param pRemoteIpAddr 데이터를 송신한 IP 주소
* @param nRemotePortNo 데이터를 송신한 UDP 포트 번호
*/
function objXPlusUdpSvrComm_OnReceive(objInst,nLength,pDataKey,pRemoteIpAddr,nRemotePortNo)
{
factory.consoleprint("nLength = " + nLength);
factory.consoleprint("pDataKey = " + pDataKey);
fldRecvDataLength1.settext(nLength);
fldSenderIpAddr1.settext(pRemoteIpAddr);
fldSenderPortNo1.settext(nRemotePortNo);
/**
* 실제 수신된 데이터를 구함
* @return strRecvData 수신한 데이터
*/
var strRecvData = objXPlusUdpSvrComm.innerctrl.GetData(pDataKey);
factory.consoleprint("RecvData = " + strRecvData);
fldRecvData1.settext(strRecvData);
}
function objXPlusUdpCltComm_OnReceive(objInst,nLength,pDataKey,pRemoteIpAddr,nRemotePortNo)
{
factory.consoleprint("nLength = " + nLength);
factory.consoleprint("pDataKey = " + pDataKey);
fldRecvDataLength2.settext(nLength);
fldSenderIpAddr2.settext(pRemoteIpAddr);
fldSenderPortNo2.settext(nRemotePortNo);
var strRecvData = objXPlusUdpCltComm.innerctrl.GetData(pDataKey);
factory.consoleprint("RecvData = " + strRecvData);
fldRecvData2.settext(strRecvData);
}
function screen_on_load()
{
fldSendData1.settext("1234ABCD가나다라1");
fldSendData2.settext("1234ABCD가나다라2");
}
function btnClearData1_on_mouseup(objInst)
{
fldRecvDataLength1.settext("");
fldSenderIpAddr1.settext("");
fldSenderPortNo1.settext("");
fldRecvData1.settext("");
}
function btnClearData2_on_mouseup(objInst)
{
fldRecvDataLength2.settext("");
fldSenderIpAddr2.settext("");
fldSenderPortNo2.settext("");
fldRecvData2.settext("");
}