CDemo.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. // 深圳梦网发展有限公司 梦网网关通用动态库 接口调用示例
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #ifdef WIN32
  5. #include <windows.h>
  6. #else
  7. #include <dlfcn.h>
  8. #define __stdcall
  9. #define LIB_NAME "libMWGateway.so"
  10. #endif
  11. //----------------------------------------------
  12. char* (__stdcall *MongateGetVer)();
  13. ////////////////////兼容http/tcp//////////////////////////
  14. //支持错误号码返回子端口发送
  15. int (__stdcall *MongateCsSPSendSmsEx)(SOCKET sock, const char* pszMobis,
  16. const char* pszMsg, int iMobiCount,const char* pszSubPort,char* pszSN, char *pszValid, char* pszInvalid);
  17. //支持长短信子端口发送
  18. int (__stdcall *MongateCsSPSendSmsNew)(SOCKET sock, const char* pszMobis,
  19. const char* pszMsg, int iMobiCount,const char* pszSubPort,char* pszSN);
  20. ////////////////////tcp//////////////////////////
  21. //Socket 4 代理连接服务器
  22. int (__stdcall *MongateConnectSocks4Proxy)(const char* pszProxyIP,int iProxyPort,
  23. const char* pszIP,int iPort,const char* pszAccount,const char* pszPwd);
  24. //Socket 5 代理连接服务器
  25. int (__stdcall *MongateConnectSocks5Proxy)( const char* pszProxyIP,
  26. int iProxyPort,const char* pszProxyAccount,const char* pszProxyPwd,
  27. const char* pszIP,int iPort,const char* pszAccount,const char* pszPwd);
  28. //普通连接服务器
  29. int (__stdcall *MongateConnect)(const char* pszIP, int iPort, const char* pszAccount, const char* pszPwd);
  30. //测试及保持长连接
  31. int (__stdcall *MongateTestConn)(SOCKET sock);
  32. //断开服务器连接
  33. void (__stdcall *MongateDisconnect)(SOCKET sock);
  34. //查询可发条数
  35. int (__stdcall *MongateQueryBalance)(SOCKET sock);
  36. //查询已使用条数
  37. int (__stdcall *MongateQueryUsed)(SOCKET sock);
  38. //客服端口普通发送函数
  39. int (__stdcall *MongateCsSendSms)(SOCKET sock, const char* pszMobis,
  40. const char* pszMsg, int iMobiCount, char* pszSN);
  41. //客服带子端口发送函数
  42. int (__stdcall *MongateCsSPSendSms)(SOCKET sock, const char* pszMobis,
  43. const char* pszMsg, int iMobiCount,const char* pszSubPort,char* pszSN);
  44. //获取上行
  45. int (__stdcall *MongateCsGetSms)(SOCKET sock, char strMsg[500][255]);
  46. //获取状态报告
  47. int (__stdcall *MongateCsGetStatusReport)(SOCKET sock, char strMsg[500][255]);
  48. ////////////////////http//////////////////////////
  49. //http代理
  50. int (__stdcall *MongateConnectHttpProxy)(const char* pszProxyIP,
  51. int iProxyPort,const char* pszProxyAccount,const char* pszProxyPwd,
  52. const char* pszIP, int iPort, const char* pszAccount, const char* pszPwd);
  53. //普通连接服务器
  54. int (__stdcall *MongateConnectHttp)(const char* pszIP, int iPort, const char* pszAccount, const char* pszPwd);
  55. //测试及保持长连接
  56. int (__stdcall *MongateTestConnHttp)(SOCKET sock);
  57. //断开服务器连接
  58. void (__stdcall *MongateDisconnectHttp)(SOCKET sock);
  59. //查询可发条数
  60. int (__stdcall *MongateQueryBalanceHttp)(SOCKET sock);
  61. //查询已使用条数
  62. int (__stdcall *MongateQueryUsedHttp)(SOCKET sock);
  63. //客服端口普通发送函数
  64. int (__stdcall *MongateCsSendSmsHttp)(SOCKET sock, const char* pszMobis,
  65. const char* pszMsg, int iMobiCount, char* pszSN);
  66. //客服带子端口发送函数
  67. int (__stdcall *MongateCsSPSendSmsHttp)(SOCKET sock, const char* pszMobis,
  68. const char* pszMsg, int iMobiCount,const char* pszSubPort,char* pszSN);
  69. //获取上行
  70. int (__stdcall *MongateCsGetSmsHttp)(SOCKET sock, char strMsg[500][255]);
  71. //获取状态报告
  72. int (__stdcall *MongateCsGetStatusReportHttp)(SOCKET sock, char strMsg[500][255]);
  73. //---------------------------------------------------------------------------
  74. char* menu[] = {
  75. "1 - test the connection",
  76. "2 - query balance",
  77. "3 - query used sms",
  78. "4 - send CS sms",
  79. "5 - send CS Subport sms",
  80. "6 - recv sms",
  81. "7 - recv status reports",
  82. "8 - reconnect",
  83. "0 - quit",
  84. NULL
  85. };
  86. int bHttp = 0;
  87. int bProxy = 1;
  88. char sServer[]={"server1.montnets.com"};
  89. char sUserId[]={"账号"};
  90. char sPwd[]={"密码"};
  91. //---------------------------------------------------------------------------
  92. int main(void)
  93. {
  94. char buf[500] = {0};
  95. char bufnew[500] = {0};
  96. int sock = 0;
  97. char selected = 0;
  98. char** option = NULL;
  99. int res = 0;
  100. void* handle = NULL;
  101. char msg[10][255] = {0};
  102. int i = 0;
  103. //加载动态库
  104. #ifdef WIN32
  105. handle = LoadLibrary("MWGateway.dll");
  106. if (handle == NULL)
  107. {
  108. puts("can't load the MWGateway.dll, program End.");
  109. return 1;
  110. }
  111. #else
  112. handle = dlopen("libMWGateway.so", RTLD_LAZY);
  113. if (handle == NULL)
  114. {
  115. printf("err: %s\n", dlerror());
  116. puts("can't load the dll.program End");
  117. return 1;
  118. }
  119. #endif
  120. //读取入口地址
  121. #ifdef WIN32
  122. MongateGetVer = (void*)GetProcAddress(handle, "MongateGetVer");
  123. MongateCsSPSendSmsEx = (void*)GetProcAddress(handle, "MongateCsSPSendSmsEx");
  124. MongateCsSPSendSmsNew = (void*)GetProcAddress(handle, "MongateCsSPSendSmsNew");
  125. //tcp
  126. MongateConnectSocks4Proxy = (void*)GetProcAddress(handle, "MongateConnectSocks4Proxy");
  127. MongateConnectSocks5Proxy = (void*)GetProcAddress(handle, "MongateConnectSocks5Proxy");
  128. MongateConnect = (void*)GetProcAddress(handle, "MongateConnect");
  129. MongateTestConn = (void*)GetProcAddress(handle, "MongateTestConn");
  130. MongateDisconnect = (void*)GetProcAddress(handle, "MongateDisconnect");
  131. MongateQueryBalance = (void*)GetProcAddress(handle, "MongateQueryBalance");
  132. MongateQueryUsed = (void*)GetProcAddress(handle, "MongateQueryUsed");
  133. MongateCsSendSms = (void*)GetProcAddress(handle, "MongateCsSendSms");
  134. MongateCsSPSendSms = (void*)GetProcAddress(handle, "MongateCsSPSendSms");
  135. MongateCsGetSms = (void*)GetProcAddress(handle, "MongateCsGetSms");
  136. MongateCsGetStatusReport = (void*)GetProcAddress(handle, "MongateCsGetStatusReport");
  137. //http
  138. MongateConnectHttpProxy = (void*)GetProcAddress(handle, "MongateConnectHttpProxy");
  139. MongateConnectHttp = (void*)GetProcAddress(handle, "MongateConnectHttp");
  140. MongateTestConnHttp = (void*)GetProcAddress(handle, "MongateTestConnHttp");
  141. MongateDisconnectHttp = (void*)GetProcAddress(handle, "MongateDisconnectHttp");
  142. MongateQueryBalanceHttp = (void*)GetProcAddress(handle, "MongateQueryBalanceHttp");
  143. MongateQueryUsedHttp = (void*)GetProcAddress(handle, "MongateQueryUsedHttp");
  144. MongateCsSendSmsHttp = (void*)GetProcAddress(handle, "MongateCsSendSmsHttp");
  145. MongateCsSPSendSmsHttp = (void*)GetProcAddress(handle, "MongateCsSPSendSmsHttp");
  146. MongateCsGetSmsHttp = (void*)GetProcAddress(handle, "MongateCsGetSmsHttp");
  147. MongateCsGetStatusReportHttp= (void*)GetProcAddress(handle, "MongateCsGetStatusReportHttp");
  148. #else
  149. MongateGetVer = dlsym(handle, "MongateGetVer");
  150. MongateCsSPSendSmsEx = dlsym(handle, "MongateCsSPSendSmsEx");
  151. MongateCsSPSendSmsNew = dlsym(handle, "MongateCsSPSendSmsNew");
  152. //tcp
  153. MongateConnectSocks4Proxy = dlsym(handle, "MongateConnectSocks4Proxy");
  154. MongateConnectSocks5Proxy = dlsym(handle, "MongateConnectSocks5Proxy");
  155. MongateConnect = dlsym(handle, "MongateConnect");
  156. MongateTestConn = dlsym(handle, "MongateTestConn");
  157. MongateDisconnect = dlsym(handle, "MongateDisconnect");
  158. MongateQueryBalance = dlsym(handle, "MongateQueryBalance");
  159. MongateQueryUsed = dlsym(handle, "MongateQueryUsed");
  160. MongateCsSendSms = dlsym(handle, "MongateCsSendSms");
  161. MongateCsSPSendSms = dlsym(handle, "MongateCsSPSendSms");
  162. MongateCsGetSms = dlsym(handle, "MongateCsGetSms");
  163. MongateCsGetStatusReport = dlsym(handle, "MongateCsGetStatusReport");
  164. //http
  165. MongateConnectHttpProxy = dlsym(handle, "MongateConnectHttpProxy");
  166. MongateConnectHttp = dlsym(handle, "MongateConnectHttp");
  167. MongateTestConnHttp = dlsym(handle, "MongateTestConnHttp");
  168. MongateDisconnectHttp = dlsym(handle, "MongateDisconnectHttp");
  169. MongateQueryBalanceHttp = dlsym(handle, "MongateQueryBalanceHttp");
  170. MongateQueryUsedHttp = dlsym(handle, "MongateQueryUsedHttp");
  171. MongateCsSendSmsHttp = dlsym(handle, "MongateCsSendSmsHttp");
  172. MongateCsSPSendSmsHttp = dlsym(handle, "MongateCsSPSendSmsHttp");
  173. MongateCsGetSmsHttp = dlsym(handle, "MongateCsGetSmsHttp");
  174. MongateCsGetStatusReportHttp= dlsym(handle, "MongateCsGetStatusReportHttp");
  175. #endif
  176. puts("connecting to the server...");
  177. puts(MongateGetVer());
  178. //连接服务器
  179. if(bHttp)
  180. {
  181. if(bProxy)//http代理
  182. sock = MongateConnectHttpProxy("127.0.0.1",8080,"admin","admin",sServer,80,sUserId,sPwd);
  183. else
  184. sock = MongateConnectHttp(sServer,80,sUserId,sPwd);
  185. }
  186. else
  187. {
  188. if(bProxy)//代理
  189. //sock = MongateConnectSocks4Proxy("127.0.0.1",1080,sServer,8018,sUserId,sPwd);
  190. sock = MongateConnectSocks5Proxy("127.0.0.1",1080,"admin","admin",sServer,8018,sUserId,sPwd);
  191. else
  192. sock = MongateConnect(sServer,8018,sUserId,sPwd);
  193. }
  194. if (sock < 1)
  195. {//连接失败
  196. printf("Fail to connect to the server. Error Numbers is %d\n", sock);
  197. return 1;
  198. }
  199. puts("Connect to the server successfully!");
  200. option = menu;
  201. do
  202. {
  203. while (*option)
  204. {
  205. puts(*option);
  206. option++;
  207. }
  208. printf("Please select an action:");
  209. selected = getchar();
  210. while (getchar() != '\n') ;//empty loop
  211. switch (selected)
  212. {
  213. case '0'://退出
  214. puts("Bye!");
  215. break;
  216. case '1'://测试连接是否有效
  217. if(bHttp)
  218. res = MongateTestConnHttp(sock);
  219. else
  220. res = MongateTestConn(sock);
  221. if(res > 0)
  222. puts("TestConn is OK");
  223. else
  224. printf ("TestConn is ERR,Error Numbers is: %d\n", res);
  225. break;
  226. case '2'://查询余额条数
  227. if(bHttp)
  228. res = MongateQueryBalanceHttp(sock);
  229. else
  230. res = MongateQueryBalance(sock);
  231. if(res > 0)
  232. printf ("Your balance is %d\n", res);
  233. else
  234. printf ("QueryBalance is ERR,Error Numbers is: %d\n", res);
  235. break;
  236. case '3'://查询使用条数
  237. if(bHttp)
  238. res = MongateQueryUsedHttp(sock);
  239. else
  240. res = MongateQueryUsed(sock);
  241. if(res > 0)
  242. printf ("Your Used is %d\n", res);
  243. else
  244. printf ("QueryUsed is ERR,Error Numbers is: %d\n", res);
  245. break;
  246. case '4'://普通发送
  247. if(bHttp)
  248. res = MongateCsSendSmsHttp(sock, "1598675****", "Hello, 中文可以吗 world! http", 1, buf);
  249. else
  250. res = MongateCsSendSms(sock, "1598675****", "Hello, world!", 1, buf);
  251. //res = MongateCsSPSendSms(sock, "13534***346", "Hello,中文可以吗 world!", 1,"1001",buf);
  252. if ( res == 1)
  253. printf("Send success.SN is %s\n", buf);
  254. else
  255. printf("Send failed. Error Numbers is: %d\n", res);
  256. break;
  257. case '5'://子端口发送
  258. if(bHttp)
  259. res = MongateCsSPSendSmsHttp(sock, "1598675****", "Hello, 中文可以吗 world! http", 1,"1001", buf);
  260. else
  261. res = MongateCsSPSendSms(sock, "1598675****", "Hello,中文可以吗 world!", 1,"1001",buf);
  262. /*
  263. {//返回错误号码
  264. res = MongateCsSPSendSmsEx(sock, "1598675****", "Hello,中文可以吗 world!", 1,"1001",buf,tmp1,tmp2);
  265. if(res >0)
  266. {
  267. puts(buf);
  268. }
  269. puts(tmp1);
  270. puts(tmp2);
  271. }
  272. {//支持长信息
  273. //res = MongateCsSPSendSmsNew(sock, "1598675****", "Hello,中文可以吗 world!888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", 1,"1001",buf);
  274. }
  275. */
  276. if ( res == 1)
  277. printf("Send SP success.SN is %s\n", buf);
  278. else
  279. printf("Send SP failed. Error Numbers is: %d\n", res);
  280. break;
  281. case '6'://获取上行
  282. if(bHttp)
  283. res = MongateCsGetSmsHttp(sock, msg);
  284. else
  285. res = MongateCsGetSms(sock, msg);
  286. if (res == 0)
  287. {
  288. puts("There is 0 new sms.");
  289. }
  290. else
  291. {
  292. for (i = 0; i < res; ++i)
  293. {
  294. printf("(%d): %s\n", i+1, msg[i]);
  295. }
  296. }
  297. break;
  298. case '7'://获取状态报告啊
  299. if(bHttp)
  300. res = MongateCsGetStatusReportHttp(sock, msg);
  301. else
  302. res = MongateCsGetStatusReport(sock, msg);
  303. if (res == 0)
  304. {
  305. puts("There is 0 new StatusReport.");
  306. }
  307. else
  308. {
  309. for (i = 0; i < res; ++i)
  310. {
  311. printf("(%d): %s\n", i+1, msg[i]);
  312. }
  313. }
  314. break;
  315. case '8'://重连
  316. //MongateDisconnect(sock);
  317. //MongateConnect();
  318. puts("Restart appliction!");
  319. break;
  320. default:
  321. puts("Error choice! Or empty function. Please select again.");
  322. }
  323. }while (selected != '0');
  324. if (sock)
  325. MongateDisconnect(sock);
  326. return 0;
  327. }