목차

XPlusUdpComm 가이드

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

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

예시

템플릿 위치: /XPLUS/xplus_udpcomm

템플릿 파일

화면 스크립트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
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("");
}