XFrameBrowser MainScreen 가이드

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

XPlusTcpSvr.ocx 컴포넌트는 TCP 서버 소켓 기능을 제공하는 컴포넌트이다.

템플릿 위치: /XPLUS/xplus_tcpsvr

템플릿 파일

/**
 * XPlusTcpSvr 데이터 수신 이벤트 처리
 * @param objInst XPlusTcpSvr 오브젝트
 * @param pRemoteIpAddr 데이터를 송신한 시스템의 IP 주소
 * @param nRemotePortNo 데이터를 송신한 시스템의 TCP 포트 번호
 * @param nSocketKey 소켓 키 값
 * @param nLength 수신한 데이터 길이
 * @param pDataKey 수신한 데이터에 대한 Key값, GetData 함수에서 사용됨
 */
function objXPlusTcpSvr_OnReceive(objInst,pRemoteIpAddr,nRemotePortNo,nSocketKey,nLength,pDataKey)
{
	factory.consoleprint("pRemoteIpAddr = " + pRemoteIpAddr);
	factory.consoleprint("nRemotePortNo = " + nRemotePortNo);
	factory.consoleprint("nSocketKey = " + nSocketKey);
	factory.consoleprint("nLength = " + nLength);
	factory.consoleprint("pDataKey = " + pDataKey);

	fldRecvIpAddr.settext(pRemoteIpAddr);
	fldRecvPortNo.settext(nRemotePortNo);
	fldRecvDataLength.settext(nLength);

	/**
	 * 실제 수신된 데이터를 구함
	 * @return strRecvData 수신한 데이터
	 */
	var strRecvData = objXPlusTcpSvr.innerctrl.GetData(pDataKey);
	factory.consoleprint("RecvData = " + strRecvData);
	fldRecvData.settext(strRecvData);

	return;
}

/**
 * TCP 세션이 연결되면 발생하는 이벤트 처리
 * @param objInst XPlusTcpSvr 오브젝트
 * @param pRemoteIpAddr 원격지 시스템의 IP 주소
 * @param nRemotePortNo 원격지 시스템의 TCP 포트 번호
 * @param nSocketKey 소켓 키 값
 */
function objXPlusTcpSvr_OnConnect(objInst,pRemoteIpAddr,nRemotePortNo,nSocketKey)
{
	factory.consoleprint("SessionConnected> pRemoteIpAddr = " + pRemoteIpAddr);
	factory.consoleprint("SessionConnected> nRemotePortNo = " + nRemotePortNo);
	factory.consoleprint("SessionConnected> nSocketKey = " + nSocketKey);

	var nRow = grdSessionList.additem();
	grdSessionList.setitemtext(nRow, 0, pRemoteIpAddr);
	grdSessionList.setitemtext(nRow, 1, nRemotePortNo);
}

/**
 * TCP 세션이 해제되면 발생하는 이벤트 처리
 * @param objInst XPlusTcpSvr 오브젝트
 * @param pRemoteIpAddr 세션이 해제된 시스템의 IP 주소
 * @param nRemotePortNo 세션이 해제된 시스템의 TCP 포트 번호
 * @param nSocketKey 소켓 키 값
 */
function objXPlusTcpSvr_OnClose(objInst,pRemoteIpAddr,nRemotePortNo,nSocketKey)
{
	factory.consoleprint("SessionClosed> pRemoteIpAddr = " + pRemoteIpAddr);
	factory.consoleprint("SessionClosed> nRemotePortNo = " + nRemotePortNo);
	factory.consoleprint("SessionClosed> nSocketKey = " + nSocketKey);

	var nRowCount = grdSessionList.getrowcount();
	var i;

	for(i = 0; i < nRowCount; i++) {
		if(grdSessionList.getitemtext(i, 0) == pRemoteIpAddr) {
			if(grdSessionList.getitemtext(i, 1) == nRemotePortNo) {
				grdSessionList.deleterow(i);
				break;
			}
		}
	}

	return;
}

// XTcpSvrComm 초기화
function btnInitXTcpSvrComm_on_mouseup(objInst)
{
	var strBindPortNo = fldBindPortNo.gettext();
	var strLogDir = "C:\\xFrame\\log";
	var nRet;

	/**
	 * XPlusTcpSvr 초기화, 처음 시작시 한번만 호출해야 함
	 * @param pLogDir 로그 저장 디렉토리 경로
	 * @param pLogFilePrefix 로그 파일 이름
	 * @param pLogLevel 로그 레벨 ("DEBUG", "INFO", "WARN", "ERROR", "FATAL") ("DEBUG" 레벨 지정시 송수신 데이터 로깅)
	 * @param nLogEncFlag 로그 암호화 여부 플래그 (0 또는 1)
	 * @param nBindPortNo Listen할 TCP 포트 번호
	 * @param nLengthFieldLength 데이터 길이 필드 길이
	 * @param nLenIncFlag 길이 필드 계산시 길이 필드 자체 포함 여부 (0 또는 1)
	 * @returns 처리 결과 값
	 * 	0: Success
	 *	 1: Already Initialized
	 *	 2: Invalid Port Number
	 *	 3: Invlalid Length Field Length
	 */
	nRet = objXPlusTcpSvr.innerctrl.InitXPlusTcpSvr(strLogDir, "XPlusTcpSvr", "DEBUG", 0, strBindPortNo, 8, 0);
	factory.consoleprint("InitXPlusTcpSvr Return Value = " + nRet);
	if(nRet != 0) {
		screen.alert("InitXPlusTcpSvr() Fail, ErrorCode = " + nRet);
	}

	/**
	 * TCP 송수신 데이터에 대한 UTF8 문자셋 처리 설정
	 * @param nSocketKey 소켓 키 값
	 * @returns 연결 여부 값
	 *		0: Success
	 *		1: Invalid Parameter
	 */
	nRet = objXPlusTcpSvr.innerctrl.SetUtf8Flag(1);
	factory.consoleprint("SetUtf8Flag Return Value = " + nRet);

	/**
	 * TCP 데이터 송신 타임아웃(단위: 밀리초) 설정
	 * @param nSocketKey 소켓 키 값
	 * @returns 연결 여부 값
	 *		0: Success
	 *		1: Invalid Parameter
	 */
	nRet = objXPlusTcpSvr.innerctrl.SetSendTimeout(5000);	// 5초
	factory.consoleprint("SetSendTimeout Return Value = " + nRet);
}

// XTcpSvrComm 시작 버튼 클릭 이벤트 처리
function btnStartXTcpSvrComm_on_mouseup(objInst)
{
	/**
	 * XPlusTcpSvr 소켓을 열고 TCP 접속 대기
 	* @param nBindPortNo Listen할 TCP 포트 번호 (0 값을 지정할 경우, InitXPlusTcpSvr 함수에서 지정한 포트 사용)
	 * @returns 처리 결과 값
	 * 	0: Success
	 *	 1: Invalid Port No
	 *	 2: Fail To Create Socket
	 *	 3: Fail To Socket Listen
	 *	 9: Not Initialized
	 */
	nRet = objXPlusTcpSvr.innerctrl.StartXPlusTcpSvr(0);
	factory.consoleprint("StartXPlusTcpSvr Return Value = " + nRet);
	if(nRet != 0) {
		screen.alert("StartXPlusTcpSvr() Fail, ErrorCode = " + nRet);
	}
}

// XTcpSvrComm 종료 버튼 클릭 이벤트 처리
function btnStopXTcpSvrComm_on_mouseup(objInst)
{
	/**
	 * XPlusTcpSvr 소켓을 닫고, 연결된 TCP 접속 해제
	 * @param nCloseSessionFlag 연결되어 있는 TCP 세션 해제 여부
	 * @param nFireEventFlag 세션 해제 이벤트 발생 처리 여부 플래그
	 * @returns 처리 결과 값
	 *		0: Success
	 *		9: Not Initialized
	 */
	var nCloseSessionFlag = 1;
	var nFireEventFlag = 0;
	var nRet;

	nRet = objXPlusTcpSvr.innerctrl.StopXPlusTcpSvr(nCloseSessionFlag, nFireEventFlag);
	factory.consoleprint("StopXPlusTcpSvr Return Value = " + nRet);
	if(nRet != 0) {
		screen.alert("StopXPlusTcpSvr() Fail, ErrorCode = " + nRet);
	}

	grdSessionList.deleteall();
}
// 세션 해제 버튼 클릭 이벤트 처리
function btnCloseSession_on_mouseup(objInst)
{
	var nCheckedRowCount = grdSessionList.getcheckedrowcount();
	if(nCheckedRowCount == 0) {
		screen.alert("연결 해제할 세션을 체크하세요.");
		return;
	}

	var nCheckedRow = grdSessionList.getcheckedrow(0);
	var strRemoteIpAddr = grdSessionList.getitemtext(nCheckedRow, 0);
	var strRemotePortNo = grdSessionList.getitemtext(nCheckedRow, 1);
	var nRet;

	/**
	 * 지정된 TCP 세션을 해재한다.
	 * @param strRemoteIpAddr 데이터 수신 대상 시스템 IP 주소
	 * @param strRemotePortNo 데이터 수신 대상 포트 번호
	 * @param nFireEventFlag 세션 해제 이벤트 발생 처리 여부 플래그
	 * @return
	 *	0 : OK
	 *	1 : Invalid Parameter
	 *	2 : Fail To Find Session
	 *	9 : Not Initialized
	 */
	var nFireEventFlag = 1;
	nRet = objXPlusTcpSvr.innerctrl.CloseSession(strRemoteIpAddr, strRemotePortNo, nFireEventFlag);
	// nRet = objXPlusTcpSvr.innerctrl.CloseSessionByKey(nSocketKey, nFireEventFlag);
	factory.consoleprint("CloseSession Return Value = " + nRet);
	if(nRet != 0) {
		screen.alert("CloseSession() Fail, ErrorCode = " + nRet);
	}
}

// 데이터 송신 버튼 클릭 이벤트 처리
function btnSendData_on_mouseup(objInst)
{
	var nCheckedRowCount = grdSessionList.getcheckedrowcount();
	if(nCheckedRowCount == 0) {
		screen.alert("데이터를 송신할 세션을 체크하세요.");
		return;
	}

	var nCheckedRow = grdSessionList.getcheckedrow(0);
	var strRemoteIpAddr = grdSessionList.getitemtext(nCheckedRow, 0);
	var nRemotePortNo = grdSessionList.getitemtext(nCheckedRow, 1);
	var strSendData = fldSendData.gettext();
	var nRet;

	/**
	 * 데이터 송신
	 * @param pRemoteIpAddr 데이터를 송신할 대상 시스템 IP 주소
	 * @param nRemotePortNo 데이터를 송신할 대상 시스템 포트 번호
	 * @param pData 송신할 데이터
	 * @returns 처리 결과 값
	 *		0: OK
	 *		1: Fail To Find Session
	 *		2: Invalid Parameter
	 *		3: Session is Not Connected
	 *		4: Fail To Send Length Part
	 *		5: Fail To Send Data Part
	 *		9: Not Initialized
	 */
	nRet = objXPlusTcpSvr.innerctrl.SendData(strRemoteIpAddr, nRemotePortNo, strSendData);
	// nRet = objXPlusTcpSvr.innerctrl.SendDataByKey(nSocketKey, strSendData);
	factory.consoleprint("SendData Return Value = " + nRet);
	if(nRet != 0) {
		screen.alert("SendData() Fail, ErrorCode = " + nRet);
	}
}

// 수신 데이터 정보 초기화 버튼 클릭 이벤트 처리
function btnClearData_on_mouseup(objInst)
{
	fldRecvIpAddr.settext("");
	fldRecvPortNo.settext("");
	fldRecvDataLength.settext("");
	fldRecvData.settext("");
}

  • guide/xplus/xplus_tcpsvr.txt
  • 마지막으로 수정됨: 2023/05/11 16:21
  • 저자 127.0.0.1