====== XPlusUdpComm 가이드 ====== 이 화면은 XPlusUdpComm.ocx 컴포넌트에 대한 샘플 화면이다. XPlusUdpComm.ocx 컴포넌트는 UDP 서버/클라이언트 소켓 기능을 제공하는 컴포넌트이다. ===== 예시 ===== 템플릿 위치: /XPLUS/xplus_udpcomm 템플릿 파일 * [[xf5projecthome>template/screen/XPLUS/xplus_udpcomm.xml|xplus_udpcomm.xml]] * [[xf5projecthome>template/screen/XPLUS/xplus_udpcomm.js|xplus_udpcomm.js]] * [[xf5projecthome>template/template.html?xframe_screen_url=/XPLUS/xplus_udpcomm|새창으로 실행]] ==== 화면 스크립트 ==== 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(""); }