|
32 | 32 | //linux使用下面的命令编译 |
33 | 33 | //g++ -std=c++20 -Wall -g APPClient_ForwardExample.cpp -o APPClient_ForwardExample.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -L ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol -ljsoncpp |
34 | 34 |
|
35 | | -int main(int argc, char** argv) |
| 35 | +int Proxy_NamedTest() |
36 | 36 | { |
37 | | -#ifdef _MSC_BUILD |
38 | | - WSADATA st_WSAData; |
39 | | - WSAStartup(MAKEWORD(2, 2), &st_WSAData); |
40 | | -#endif |
41 | 37 | XSOCKET m_Socket; |
42 | 38 | LPCXSTR lpszServiceAddr = _X("127.0.0.1"); |
43 | 39 | if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5402)) |
@@ -184,11 +180,113 @@ int main(int argc, char** argv) |
184 | 180 | BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); |
185 | 181 | } |
186 | 182 | } |
187 | | - } |
| 183 | + } |
188 | 184 | } |
189 | 185 |
|
190 | | - std::this_thread::sleep_for(std::chrono::seconds(20000)); |
191 | 186 | XClient_TCPSelect_Close(m_Socket); |
| 187 | + return 0; |
| 188 | +} |
| 189 | +int Proxy_AnonyTest() |
| 190 | +{ |
| 191 | + XSOCKET m_Socket; |
| 192 | + LPCXSTR lpszServiceAddr = _X("127.0.0.1"); |
| 193 | + if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5402)) |
| 194 | + { |
| 195 | + printf("连接失败!错误:%lX\n", XClient_GetLastError()); |
| 196 | + return 0; |
| 197 | + } |
| 198 | + printf("连接成功!\n"); |
| 199 | + |
| 200 | + int nMsgLen = 0; |
| 201 | + XENGINE_PROTOCOLHDR st_ProtocolHdr; |
| 202 | + XENGINE_PROTOCOL_USERAUTH st_UserAuth; |
| 203 | + |
| 204 | + memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); |
| 205 | + memset(&st_UserAuth, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH)); |
| 206 | + //登录 |
| 207 | + st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; |
| 208 | + st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; |
| 209 | + st_ProtocolHdr.byIsReply = true; |
| 210 | + st_ProtocolHdr.byVersion = 0; |
| 211 | + st_ProtocolHdr.unPacketSize = sizeof(XENGINE_PROTOCOL_USERAUTH); |
| 212 | + st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH; |
| 213 | + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREQ; |
| 214 | + |
| 215 | + _tcsxcpy(st_UserAuth.tszUserName, "test"); |
| 216 | + |
| 217 | + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) |
| 218 | + { |
| 219 | + printf("发送失败!\n"); |
| 220 | + return 0; |
| 221 | + } |
| 222 | + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_UserAuth, sizeof(XENGINE_PROTOCOL_USERAUTH))) |
| 223 | + { |
| 224 | + printf("发送失败!\n"); |
| 225 | + return 0; |
| 226 | + } |
| 227 | + |
| 228 | + nMsgLen = 0; |
| 229 | + XCHAR* ptszMsgBuffer = NULL; |
| 230 | + memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); |
| 231 | + if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) |
| 232 | + { |
| 233 | + printf("接受数据失败!\n"); |
| 234 | + return 0; |
| 235 | + } |
| 236 | + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); |
| 237 | + //匿名转发请求 |
| 238 | + Json::Value st_JsonRoot; |
| 239 | + st_JsonRoot["tszDstAddr"] = "127.0.0.1:5401"; |
| 240 | + |
| 241 | + st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; |
| 242 | + st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; |
| 243 | + st_ProtocolHdr.byIsReply = true; |
| 244 | + st_ProtocolHdr.byVersion = 0; |
| 245 | + st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length(); |
| 246 | + st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD; |
| 247 | + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_ANONYREQ; |
| 248 | + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) |
| 249 | + { |
| 250 | + printf("发送失败!\n"); |
| 251 | + return 0; |
| 252 | + } |
| 253 | + if (!XClient_TCPSelect_SendMsg(m_Socket, st_JsonRoot.toStyledString().c_str(), st_ProtocolHdr.unPacketSize)) |
| 254 | + { |
| 255 | + printf("发送失败!\n"); |
| 256 | + return 0; |
| 257 | + } |
| 258 | + nMsgLen = 2048; |
| 259 | + if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) |
| 260 | + { |
| 261 | + printf("接受数据失败!\n"); |
| 262 | + return 0; |
| 263 | + } |
| 264 | + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); |
| 265 | + //成功后发送数据 |
| 266 | + XClient_TCPSelect_SendMsg(m_Socket, "hello", 5); |
| 267 | + std::this_thread::sleep_for(std::chrono::seconds(1)); |
| 268 | + printf("send 5 str\n"); |
| 269 | + //接受数据 |
| 270 | + nMsgLen = 2048; |
| 271 | + XCHAR tszMsgBuffer[2048] = {}; |
| 272 | + if (XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) |
| 273 | + { |
| 274 | + printf("%s\n", tszMsgBuffer); |
| 275 | + } |
| 276 | + |
| 277 | + XClient_TCPSelect_Close(m_Socket); |
| 278 | + return 0; |
| 279 | +} |
| 280 | + |
| 281 | +int main(int argc, char** argv) |
| 282 | +{ |
| 283 | +#ifdef _MSC_BUILD |
| 284 | + WSADATA st_WSAData; |
| 285 | + WSAStartup(MAKEWORD(2, 2), &st_WSAData); |
| 286 | +#endif |
| 287 | + |
| 288 | + Proxy_AnonyTest(); |
| 289 | + Proxy_NamedTest(); |
192 | 290 | #ifdef _MSC_BUILD |
193 | 291 | WSACleanup(); |
194 | 292 | #endif |
|
0 commit comments