목차

XPlusUdpComm 가이드

이 화면은 XPlusUdpComm.ocx 컴포넌트에 대한 샘플 화면이다.

XPlusUdpComm.ocx 컴포넌트는 UDP 서버/클라이언트 소켓 기능을 제공하는 컴포넌트이다.

예시

템플릿 위치: /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("");
}