PCTCP.C
上传用户:bjghjy
上传日期:2007-01-07
资源大小:379k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <malloc.h>
  6. #include "hq.h"
  7. #include "pctcp.h"
  8. int sdHq =-1, sdJy =-1;
  9. #define WSA_MAKEWORD(x,y)       ((y) * 256 + (x))
  10. BOOL running =FALSE, run_cancelled =FALSE;
  11. int PROTO_USE =PROTO_UDP;
  12. char  * ReadBuf; //[MAX_READ_BUF_SIZE+1];  
  13. BOOL can_read =TRUE, can_write =FALSE;
  14. BOOL fSockError =FALSE;
  15. char HostName[40];
  16. LPSTR GetError(LPSTR err_prefix);
  17. FILE *fp =NULL;
  18. int CalcTime(int jys);
  19. int StringSub(LPSTR lpstr1, LPSTR lpstr2, LPSTR lpres, int s_type);
  20. int CompString(LPSTR, LPSTR);
  21. int     GMinRecalcJgMax(void);
  22. int     GMinRecalcLcMax(void);
  23. int MaxMinChangeHqData(int jys, int maxmin);
  24. void SetStatusText(LPSTR);
  25. int UDPBlockingHook (void);
  26. extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);
  27. extern BOOL PutInitString(LPSTR, LPSTR, LPSTR);
  28. extern BOOL ErrMsg(HWND, LPSTR);
  29. extern HWND ghWndMain, ghWndHq, ghWndStatus, ghWndCj;
  30. extern HINSTANCE ghInstance;
  31. extern HWND ghWndXlt, ghWndJlt, ghWndMaxMin;
  32. extern HWND ghDlgJy;
  33. void WriteMsg(LPSTR msg)
  34. {                
  35. if(fp) fputs(msg, fp);
  36. }
  37. int PCTCPInit(void)
  38. {
  39. char temp[40];
  40. //WORD VersionReqd;        
  41. WSADATA myWSAData;
  42.     int ret;
  43.     
  44. //VersionReqd=WSA_MAKEWORD(MAJOR_VERSION, MINOR_VERSION);
  45. if(!GetInitString("NET", "HOST", HostName))
  46. {
  47. //strcpy(HostName, "172.20.16.68     ");   //汕头 
  48. //strcpy(HostName, "10.17.128.188     ");   //石家庄
  49. //strcpy(HostName, "172.21.112.99    ");   //梅州 
  50. //strcpy(HostName, "10.62.171.68     ");   //长沙
  51. //strcpy(HostName, "10.190.2.103     ");   //银川
  52. strcpy(HostName, "10.29.15.3     ");   //呼市
  53. //strcpy(HostName, "10.157.2.6     ");   //贵阳 
  54. //strcpy(HostName, "10.19.160.30     ");   //邢台
  55. PutInitString("NET", "HOST", HostName);
  56. }
  57. ReadBuf =(char *)_fmalloc(MAX_READ_BUF_SIZE+1);
  58. ret = WSAStartup(0x0101, &myWSAData);
  59.     
  60. sdHq =sdJy =-1;
  61. if (ret != 0)
  62. return -1;
  63. if(GetInitString("NET", "PROTO", temp))
  64. {
  65. if(temp[0] =='U') PROTO_USE =PROTO_UDP;
  66. else PROTO_USE=PROTO_TCP;
  67. }
  68. else 
  69. {
  70. PutInitString("NET", "PROTO", "TCP");      
  71. PROTO_USE=PROTO_TCP;                             
  72. }
  73.                             
  74. return 0;
  75. }
  76. int PCTCPClose(void)
  77. {
  78. int ret;
  79. run_cancelled =TRUE;
  80. //WSACancelBlockingCall();
  81. if(sdHq !=-1)
  82. {
  83. closesocket(sdHq);
  84. sdHq =-1;
  85.     }
  86. if(sdJy !=-1)
  87. {
  88. closesocket(sdJy);
  89. sdJy =-1;
  90.     }
  91. ret = WSACleanup();
  92. if (ret == SOCKET_ERROR && h_errno == WSAEINPROGRESS)
  93. {
  94. //ErrMsg(NULL, "Data transfer in progress.nStop transfer first.");
  95. return -1;
  96. }
  97. if(fp) fclose(fp);
  98. return 0;
  99. }
  100. int PCTCPExit(void)
  101. {
  102. static BOOL fExit =FALSE;
  103. _ffree(ReadBuf);
  104. if(fExit ==TRUE) return 0;
  105. fExit =TRUE;            
  106. PCTCPClose();
  107. if(fp) fclose(fp);
  108. return 0;
  109. }
  110. // used for client
  111. int ConnectHost(int type, int protoUse)
  112. {
  113. LPSTR lpHostName;
  114. struct  hostent FAR *hp;
  115. struct  sockaddr_in server_addr;
  116. SOCKET  hSock;
  117. int iSockType,ret;
  118. //long lret;
  119. time_t time_start, time_end;
  120. lpHostName =&HostName[0];
  121. if(protoUse ==-1) protoUse =PROTO_USE;
  122. memset(&server_addr, 0, sizeof(server_addr));
  123. server_addr.sin_addr.s_addr =/*INADDR_BROADCAST;//ANY;*/(u_long)inet_addr(lpHostName);
  124. if (server_addr.sin_addr.s_addr == (u_long) -1L || 
  125. server_addr.sin_addr.s_addr == 0) 
  126. {
  127. if ((hp = gethostbyname(lpHostName)) == NULL) 
  128. {
  129. //ErrMsg(NULL, "rpcinfo: server address is unknown");
  130. return -1;
  131. }
  132. _fmemcpy((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);
  133. }
  134. server_addr.sin_family = PF_INET;
  135. if (protoUse == PROTO_TCP)
  136. iSockType = SOCK_STREAM;
  137. else
  138. iSockType = SOCK_DGRAM;
  139.     
  140. if(type !=1)
  141. {
  142. if(sdHq !=-1) closesocket(sdHq);
  143. server_addr.sin_port = htons(PORT_HQ);
  144.     
  145. hSock = socket(PF_INET, iSockType, 0);
  146. if (hSock == INVALID_SOCKET)
  147. return -1;
  148.     
  149. ret =WSAAsyncSelect(hSock, ghWndMain, WM_USER+1, FD_READ);//|FD_CONNECT);
  150. if(ret <0)
  151. {
  152. closesocket(hSock);
  153. return -1;
  154. }
  155. time(&time_start);
  156. retry_hq_connect:
  157. time(&time_end);
  158. if(difftime(time_end, time_start) >10)
  159. {
  160. closesocket(hSock);
  161. return (SOCKET) -1;
  162. }
  163. ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));
  164.     
  165. if (ret == SOCKET_ERROR) {
  166. if (h_errno == WSAEWOULDBLOCK)
  167. goto retry_hq_connect;
  168. }                            
  169. sdHq =hSock;
  170. }
  171. return hSock;
  172. }
  173. int BeginConnect(char *host)
  174. {
  175. LPSTR lpHostName;
  176. struct  hostent FAR *hp;
  177. struct  sockaddr_in server_addr;
  178. SOCKET  hSock;
  179. int iSockType,ret;
  180. lpHostName =host;
  181. memset(&server_addr, 0, sizeof(server_addr));
  182. server_addr.sin_addr.s_addr =(u_long)inet_addr(lpHostName);
  183. if (server_addr.sin_addr.s_addr == (u_long) -1L || 
  184. server_addr.sin_addr.s_addr == 0) 
  185. {
  186. if ((hp = gethostbyname(lpHostName)) == NULL) 
  187. return -1;
  188. _fmemcpy((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);
  189. }
  190. server_addr.sin_family = PF_INET;
  191. iSockType = SOCK_STREAM;
  192.     
  193. if(sdHq !=-1) closesocket(sdHq);
  194. server_addr.sin_port = htons(PORT_HQ);
  195.     
  196. hSock = socket(PF_INET, iSockType, 0);
  197. if (hSock == INVALID_SOCKET)
  198. return -1;
  199.     
  200. ret =WSAAsyncSelect(hSock, ghWndMain, WM_USER+1, FD_READ|FD_CONNECT);
  201. if(ret <0)
  202. {
  203. closesocket(hSock);
  204. return -1;
  205. }
  206. ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));
  207. if (ret == SOCKET_ERROR) 
  208. {
  209. if (h_errno != WSAEWOULDBLOCK)
  210. return -1;
  211. }                            
  212. sdHq =hSock;
  213. return hSock;
  214. }
  215. int ConnectToJyHost(char *HostName)
  216. {
  217. LPSTR lpHostName;
  218. struct  hostent FAR *hp;
  219. struct  sockaddr_in server_addr;
  220.     int hSock,iSockType,ret;
  221. if(sdJy !=-1)
  222. {
  223. closesocket(sdJy);
  224. sdJy =-1;
  225. }
  226. lpHostName =&HostName[0];
  227. memset(&server_addr, 0, sizeof(server_addr));
  228. server_addr.sin_addr.s_addr =(u_long)inet_addr(lpHostName);
  229. if (server_addr.sin_addr.s_addr == (u_long) -1L || 
  230. server_addr.sin_addr.s_addr == 0) 
  231. {
  232. if ((hp = gethostbyname(lpHostName)) == NULL) 
  233. {
  234. ErrMsg(NULL, "rpcinfo: server address is unknown");
  235. return -1;
  236. }
  237. _fmemcpy((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);
  238. }
  239. server_addr.sin_family = PF_INET;
  240. iSockType = SOCK_STREAM;
  241.     
  242. server_addr.sin_port = htons((u_int) PORT_JY);
  243.     
  244. hSock = socket(PF_INET, iSockType, 0);
  245. if (hSock == INVALID_SOCKET)
  246. {
  247. ErrMsg(NULL, "socket() failed");
  248. return (SOCKET) -1;
  249. }
  250. ret =WSAAsyncSelect(hSock, ghWndMain, WM_USER+2, FD_READ|FD_CONNECT);
  251. if(ret <0)
  252. {
  253. closesocket(hSock);
  254. return -1;
  255. }
  256.     ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));
  257. if (ret == SOCKET_ERROR)
  258. {
  259. ret =WSAGetLastError();
  260. if(ret ==WSAEWOULDBLOCK)
  261. ret =0;
  262. else
  263. {
  264. closesocket(hSock);
  265. return ret;
  266. }
  267. }
  268. sdJy =hSock;
  269. return ret;
  270. }
  271. int PCTCPStop(void)
  272. {
  273. run_cancelled =TRUE;
  274. can_read =FALSE;
  275. return 0;
  276. }
  277. void PCTCPPause(BOOL fPause)
  278. {
  279. can_read =!fPause;
  280. }                  
  281. int UDPBlockingHook (void)
  282. {
  283. MSG msg;
  284. //run_cancelled =FALSE;
  285. if(run_cancelled ==TRUE) return FALSE;
  286. if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  287. {
  288. TranslateMessage(&msg);
  289.  DispatchMessage(&msg);   
  290. if(msg.message ==WM_QUIT)
  291. {
  292.        PostQuitMessage(0);
  293.        run_cancelled =TRUE;               
  294.        WSASetLastError(WSAEINTR);
  295.        return FALSE;
  296. }
  297. //WriteMsg("messagen");
  298. return TRUE;
  299. }
  300. return FALSE;
  301. }
  302. int PASCAL FAR WSAsperror(int errorcode, char far * buf, int len)
  303. {
  304. int err_len;
  305.     
  306. if (errorcode == 0)
  307. errorcode = WSABASEERR;
  308. if (errorcode < WSABASEERR)
  309. return 0;
  310.     
  311. err_len = LoadString(ghInstance,errorcode,buf,len);
  312. return err_len;
  313. }
  314. LPSTR GetError(LPSTR err_prefix)
  315. {
  316. int wsa_err;
  317. char errbuf[1000];
  318. char prbuf[1000];
  319. wsa_err =WSAGetLastError(); 
  320. WSAsperror(wsa_err, (LPSTR)errbuf, sizeof(errbuf));
  321.     
  322. wsprintf((LPSTR)prbuf, "%s:n%s", (LPSTR) err_prefix, (LPSTR)errbuf);
  323. return &prbuf[0];  
  324. }
  325. int check_socket_status(int sd)
  326. {
  327. struct timeval wait;
  328. fd_set send_ready,except;
  329. wait.tv_sec =wait.tv_usec=0;
  330. FD_ZERO(&send_ready);
  331. FD_ZERO(&except);
  332. FD_SET(sd,&send_ready);
  333. FD_SET(sd,&except);
  334. if(select(FD_SETSIZE,(fd_set *)0,&send_ready,
  335. &except,&wait)<0)
  336. return(-1);
  337. if(FD_ISSET(sd,&send_ready))
  338. return(0);
  339. else if(FD_ISSET(sd,&except))
  340. return(-2);
  341. else
  342. return(-3);
  343. }
  344. void SetStatusText(LPSTR tmp)
  345. {                 
  346. HDC hDC;
  347. hDC =GetDC(NULL);
  348. SetBkColor(hDC, RGB(255, 0, 255));
  349. SetBkMode(hDC, TRANSPARENT);
  350. TextOut(hDC, 10, 2, tmp, strlen(tmp));
  351. ReleaseDC(NULL, hDC);
  352. }