debug_server_socket.cpp.orig 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #include <iostream>
  2. #include <winsock.h>
  3. #include <stdio.h>
  4. #include "./../system_basic_info/SystemAnalysis.h"
  5. #include "debug_server_socket.h"
  6. using namespace std;
  7. #define PORT 6123
  8. #define MSGSIZE 1024
  9. #pragma warning(disable: 4018)
  10. #pragma warning(disable: 4996)
  11. #pragma comment(lib, "ws2_32.lib")
  12. #define CLIENT_SOCKET_NUM_MAX 20
  13. int g_iTotalConn = 0;
  14. SOCKET g_CliSocketArr[CLIENT_SOCKET_NUM_MAX + 1];
  15. DWORD WINAPI WorkerThread(LPVOID lpParam);
  16. DWORD WINAPI AcceptThread(LPVOID lpParam);
  17. int parserMsg(SOCKET s, char *msg);
  18. SOCKET sListen;
  19. int debug_server_init(void)
  20. {
  21. HANDLE hThread;
  22. WSADATA wsaData;
  23. //SOCKET sClient;
  24. SOCKADDR_IN local;
  25. //SOCKADDR_IN client;
  26. int iAddrSize = sizeof(SOCKADDR_IN);
  27. DWORD dwThreadId;
  28. DWORD dwAcceptThreadId;
  29. // Initialize windows socket library
  30. WSAStartup(0x0202, &wsaData);
  31. // Create listening socket
  32. sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  33. // Bind
  34. local.sin_family = AF_INET;
  35. local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  36. local.sin_port = htons(PORT);
  37. bind(sListen, (sockaddr*)&local, sizeof(SOCKADDR_IN));
  38. // Listen
  39. listen(sListen, 3);
  40. // Create worker thread
  41. CreateThread(NULL, 0, WorkerThread, NULL, 0, &dwThreadId);
  42. <<<<<<< HEAD
  43. /*
  44. while (TRUE)
  45. {
  46. // Accept a connection
  47. sClient = accept(sListen, (sockaddr*)&client, &iAddrSize);
  48. printf("Accepted client:%s:%d/n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
  49. // Add socket to g_CliSocketArr
  50. g_CliSocketArr[g_iTotalConn++] = sClient;
  51. }
  52. */
  53. =======
  54. >>>>>>> newprotocal
  55. hThread = CreateThread(NULL, 0, AcceptThread, NULL, 0, &dwAcceptThreadId);
  56. //WaitForSingleObject(hThread, INFINITE);
  57. return 0;
  58. }
  59. DWORD WINAPI AcceptThread(LPVOID lpParam)
  60. {
  61. SOCKET sClient;
  62. SOCKADDR_IN client;
  63. int iAddrSize = sizeof(SOCKADDR_IN);
  64. while (TRUE)
  65. {
  66. // Accept a connection
  67. sClient = accept(sListen, (sockaddr*)&client, &iAddrSize);
  68. printf("Accepted client:%s:%d/n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
  69. // Add socket to g_CliSocketArr
  70. if(g_iTotalConn > CLIENT_SOCKET_NUM_MAX - 1)
  71. {
  72. continue;
  73. }
  74. g_CliSocketArr[g_iTotalConn++] = sClient;
  75. Sleep(1);
  76. }
  77. }
  78. DWORD WINAPI WorkerThread(LPVOID lpParam)
  79. {
  80. int i;
  81. fd_set fdread;
  82. int ret;
  83. struct timeval tv = {1, 0};
  84. while (TRUE)
  85. {
  86. char szMessage[MSGSIZE] = {0};
  87. FD_ZERO(&fdread);
  88. for (i = 0; i < g_iTotalConn; i++)
  89. {
  90. FD_SET(g_CliSocketArr[i], &fdread);
  91. }
  92. // We only care read event
  93. ret = select(0, &fdread, NULL, NULL, &tv);
  94. if (ret == 0)
  95. {
  96. // Time expired
  97. continue;
  98. }
  99. for (i = 0; i < g_iTotalConn; i++)
  100. {
  101. if (FD_ISSET(g_CliSocketArr[i], &fdread))
  102. {
  103. // A read event happened on g_CliSocketArr
  104. ret = recv(g_CliSocketArr[i], szMessage, MSGSIZE, 0);
  105. if (ret == 0 || (ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET))
  106. {
  107. // Client socket closed
  108. printf("Client socket %d closed./n", g_CliSocketArr[i]);
  109. closesocket(g_CliSocketArr[i]);
  110. if (i < g_iTotalConn-1)
  111. {
  112. g_CliSocketArr[i--] = g_CliSocketArr[--g_iTotalConn];
  113. }
  114. }
  115. else
  116. {
  117. // We reveived a message from client
  118. if(strlen(szMessage) > 0)
  119. {
  120. printf("receive a messagexxxx: %s\n", szMessage);
  121. }
  122. //char buf[100] = "hello word.\n";
  123. //send(g_CliSocketArr[i], buf, strlen(buf), 0);
  124. parserMsg(g_CliSocketArr[i], szMessage);
  125. }
  126. }
  127. }
  128. <<<<<<< HEAD
  129. =======
  130. >>>>>>> newprotocal
  131. Sleep(1);
  132. }
  133. }
  134. int parserMsg(SOCKET s, char *msg)
  135. {
  136. if(NULL == msg)
  137. {
  138. return ERROR;
  139. }
  140. int i=0;
  141. int word_num = 0;
  142. char *p;
  143. char *delims=" ";
  144. char *next_token = NULL;
  145. char localBuf[MAX_CMD_WORD_NUM][MAX_CMD_WORD_LEN] = {0};
  146. p=strtok_s(msg, delims, &next_token);
  147. while(p!=NULL)
  148. {
  149. strcpy_s(localBuf[word_num++], p);
  150. p=strtok_s(NULL, delims, &next_token);
  151. }
  152. for(i=0; i<word_num; i++)
  153. {
  154. printf("parser result localBuf[%d]:%s\n", i, localBuf[i]);
  155. }
  156. if(0 == strcmp("clear", strlwr(localBuf[0])))
  157. {
  158. for(i=0; i<LOCATION_SYSTEM_BRANCH_MAX; i++)
  159. {
  160. LocationSystemCount[i] = 0;
  161. }
  162. }
  163. if((0 == strcmp("show", strlwr(localBuf[0]))) && (0 == strcmp("count", strlwr(localBuf[1]))))
  164. {
  165. printf("Show data collect.\n");
  166. //send(s, resp, strlen(resp), 0);
  167. for(i=0; i<LOCATION_SYSTEM_BRANCH_MAX; i++)
  168. {
  169. if(LocationSystemCount[i] > 0)
  170. {
  171. char resp[100] = {0};
  172. sprintf(resp, "LocationSystemCount[%d]:%d ", i, LocationSystemCount[i]);
  173. send(s, resp, strlen(resp), 0);
  174. }
  175. }
  176. }
  177. if((0 == strcmp("show", strlwr(localBuf[0]))) && (0 == strcmp("time", strlwr(localBuf[1]))))
  178. {
  179. //printf("Show 1 min data collect.\n");
  180. int time = atoi(strlwr(localBuf[2]));
  181. char resp_tmp[100] = {0};
  182. sprintf(resp_tmp, "Wait %d min data collect.\n", time);
  183. send(s, resp_tmp, strlen(resp_tmp), 0);
  184. for(i=0; i<LOCATION_SYSTEM_BRANCH_MAX; i++)
  185. {
  186. LocationSystemCount[i] = 0;
  187. }
  188. Sleep(time*60*1000);
  189. for(i=0; i<LOCATION_SYSTEM_BRANCH_MAX; i++)
  190. {
  191. if(LocationSystemCount[i] > 0)
  192. {
  193. char resp[100] = {0};
  194. sprintf(resp, "LocationSystemCount[%d]:%d", i, LocationSystemCount[i]);
  195. send(s, resp, strlen(resp), 0);
  196. }
  197. }
  198. }
  199. return OK;
  200. }