⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pctcp.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
字号:
#include <windows.h>#include <stdio.h>#include <string.h>#include <time.h>#include <malloc.h>#include "hq.h"#include "pctcp.h"int sdHq =-1, sdJy =-1;#define WSA_MAKEWORD(x,y)       ((y) * 256 + (x))BOOL running =FALSE, run_cancelled =FALSE;int PROTO_USE =PROTO_UDP;char  * ReadBuf;	//[MAX_READ_BUF_SIZE+1];  BOOL can_read =TRUE, can_write =FALSE;BOOL fSockError =FALSE;char HostName[40];LPSTR GetError(LPSTR err_prefix);FILE *fp =NULL;int CalcTime(int jys);int StringSub(LPSTR lpstr1, LPSTR lpstr2, LPSTR lpres, int s_type);int CompString(LPSTR, LPSTR);int     GMinRecalcJgMax(void);int     GMinRecalcLcMax(void);int MaxMinChangeHqData(int jys, int maxmin);void SetStatusText(LPSTR);int UDPBlockingHook (void);extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);extern BOOL PutInitString(LPSTR, LPSTR, LPSTR);extern BOOL ErrMsg(HWND, LPSTR);extern HWND ghWndMain, ghWndHq, ghWndStatus, ghWndCj;extern HINSTANCE ghInstance;extern HWND ghWndXlt, ghWndJlt, ghWndMaxMin;extern HWND ghDlgJy;void WriteMsg(LPSTR msg){                	if(fp) fputs(msg, fp);}int PCTCPInit(void){	char temp[40];	//WORD VersionReqd;        	WSADATA myWSAData;    int ret;    	//VersionReqd=WSA_MAKEWORD(MAJOR_VERSION, MINOR_VERSION);	if(!GetInitString("NET", "HOST", HostName))	{		//strcpy(HostName, "172.20.16.68     ");   //汕头 		//strcpy(HostName, "10.17.128.188     ");   //石家庄		//strcpy(HostName, "172.21.112.99    ");   //梅州 		//strcpy(HostName, "10.62.171.68     ");   //长沙		//strcpy(HostName, "10.190.2.103     ");   //银川		strcpy(HostName, "10.29.15.3     ");   //呼市		//strcpy(HostName, "10.157.2.6     ");   //贵阳 		//strcpy(HostName, "10.19.160.30     ");   //邢台		PutInitString("NET", "HOST", HostName);	}		ReadBuf =(char *)_fmalloc(MAX_READ_BUF_SIZE+1);		ret = WSAStartup(0x0101, &myWSAData);	    	sdHq =sdJy =-1;	if (ret != 0)		return -1;		if(GetInitString("NET", "PROTO", temp))	{		if(temp[0] =='U') PROTO_USE =PROTO_UDP;		else PROTO_USE=PROTO_TCP;	}	else 	{		PutInitString("NET", "PROTO", "TCP");      		PROTO_USE=PROTO_TCP;	                            	}	                            	return 0;}int PCTCPClose(void){	int ret;	run_cancelled =TRUE;		//WSACancelBlockingCall();	if(sdHq !=-1)	{		closesocket(sdHq);		sdHq =-1;    }	if(sdJy !=-1)	{		closesocket(sdJy);		sdJy =-1;    }		ret = WSACleanup();	if (ret == SOCKET_ERROR && h_errno == WSAEINPROGRESS)	{		//ErrMsg(NULL, "Data transfer in progress.\nStop transfer first.");		return -1;	}		if(fp) fclose(fp);		return 0;}		int PCTCPExit(void){	static BOOL fExit =FALSE;		_ffree(ReadBuf);	if(fExit ==TRUE) return 0;	fExit =TRUE;            		PCTCPClose();		if(fp) fclose(fp);		return 0;}// used for clientint ConnectHost(int type, int protoUse){	LPSTR lpHostName;	struct  hostent FAR *hp;	struct  sockaddr_in server_addr;	SOCKET  hSock;	int iSockType,ret;	//long lret;	time_t time_start, time_end;		lpHostName =&HostName[0];	if(protoUse ==-1) protoUse =PROTO_USE;	memset(&server_addr, 0, sizeof(server_addr));	server_addr.sin_addr.s_addr =/*INADDR_BROADCAST;//ANY;*/(u_long)inet_addr(lpHostName);		if (server_addr.sin_addr.s_addr == (u_long) -1L || 		server_addr.sin_addr.s_addr == 0) 	{		if ((hp = gethostbyname(lpHostName)) == NULL) 		{			//ErrMsg(NULL, "rpcinfo: server address is unknown");			return -1;		}		_fmemcpy((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);	}	server_addr.sin_family = PF_INET;	if (protoUse == PROTO_TCP)		iSockType = SOCK_STREAM;	else		iSockType = SOCK_DGRAM;    	if(type !=1)	{		if(sdHq !=-1) closesocket(sdHq);				server_addr.sin_port = htons(PORT_HQ);    		hSock = socket(PF_INET, iSockType, 0);		if (hSock == INVALID_SOCKET)			return -1;    		ret =WSAAsyncSelect(hSock, ghWndMain, WM_USER+1, FD_READ);//|FD_CONNECT);				if(ret <0)		{			closesocket(hSock);			return -1;		}			time(&time_start);		retry_hq_connect:		time(&time_end);		if(difftime(time_end, time_start) >10)		{			closesocket(hSock);			return (SOCKET) -1;		}		ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));    		if (ret == SOCKET_ERROR) {			if (h_errno == WSAEWOULDBLOCK)				goto retry_hq_connect;		}                            		sdHq =hSock;	}	return hSock;}int BeginConnect(char *host){	LPSTR lpHostName;	struct  hostent FAR *hp;	struct  sockaddr_in server_addr;	SOCKET  hSock;	int iSockType,ret;		lpHostName =host;	memset(&server_addr, 0, sizeof(server_addr));	server_addr.sin_addr.s_addr =(u_long)inet_addr(lpHostName);		if (server_addr.sin_addr.s_addr == (u_long) -1L || 		server_addr.sin_addr.s_addr == 0) 	{		if ((hp = gethostbyname(lpHostName)) == NULL) 			return -1;		_fmemcpy((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);	}	server_addr.sin_family = PF_INET;	iSockType = SOCK_STREAM;    	if(sdHq !=-1) closesocket(sdHq);			server_addr.sin_port = htons(PORT_HQ);    	hSock = socket(PF_INET, iSockType, 0);	if (hSock == INVALID_SOCKET)		return -1;    	ret =WSAAsyncSelect(hSock, ghWndMain, WM_USER+1, FD_READ|FD_CONNECT);	if(ret <0)	{		closesocket(hSock);		return -1;	}				ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));	if (ret == SOCKET_ERROR) 	{		if (h_errno != WSAEWOULDBLOCK)			return -1;	}                            	sdHq =hSock;	return hSock;}int ConnectToJyHost(char *HostName){	LPSTR lpHostName;	struct  hostent FAR *hp;	struct  sockaddr_in server_addr;    int hSock,iSockType,ret;		if(sdJy !=-1)	{		closesocket(sdJy);		sdJy =-1;	}	lpHostName =&HostName[0];	memset(&server_addr, 0, sizeof(server_addr));	server_addr.sin_addr.s_addr =(u_long)inet_addr(lpHostName);		if (server_addr.sin_addr.s_addr == (u_long) -1L || 		server_addr.sin_addr.s_addr == 0) 	{		if ((hp = gethostbyname(lpHostName)) == NULL) 		{			ErrMsg(NULL, "rpcinfo: server address is unknown");			return -1;		}		_fmemcpy((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);	}	server_addr.sin_family = PF_INET;	iSockType = SOCK_STREAM;    	server_addr.sin_port = htons((u_int) PORT_JY);    	hSock = socket(PF_INET, iSockType, 0);	if (hSock == INVALID_SOCKET)	{		ErrMsg(NULL, "socket() failed");		return (SOCKET) -1;	}		ret =WSAAsyncSelect(hSock, ghWndMain, WM_USER+2, FD_READ|FD_CONNECT);	if(ret <0)	{		closesocket(hSock);		return -1;	}    ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));	if (ret == SOCKET_ERROR)	{		ret =WSAGetLastError();		if(ret ==WSAEWOULDBLOCK)			ret =0;		else		{						closesocket(hSock);			return ret;		}	}		sdJy =hSock;		return ret;}int PCTCPStop(void){	run_cancelled =TRUE;	can_read =FALSE;		return 0;}void PCTCPPause(BOOL fPause){	can_read =!fPause;}                  int UDPBlockingHook (void){	MSG msg;	//run_cancelled =FALSE;	if(run_cancelled ==TRUE) return FALSE;	if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))	{		TranslateMessage(&msg);		 DispatchMessage(&msg);   		if(msg.message ==WM_QUIT)		{		       PostQuitMessage(0);		       run_cancelled =TRUE;               		       WSASetLastError(WSAEINTR);		       return FALSE;		}		//WriteMsg("message\n");		return TRUE;	}	return FALSE;}int PASCAL FAR WSAsperror(int errorcode, char far * buf, int len){	int err_len;    	if (errorcode == 0)		errorcode = WSABASEERR;	if (errorcode < WSABASEERR)		return 0;	    	err_len = LoadString(ghInstance,errorcode,buf,len);		return err_len;	}LPSTR GetError(LPSTR err_prefix){	int wsa_err;	char errbuf[1000];	char prbuf[1000];		wsa_err =WSAGetLastError(); 		WSAsperror(wsa_err, (LPSTR)errbuf, sizeof(errbuf));	    	wsprintf((LPSTR)prbuf, "%s:\n%s", (LPSTR) err_prefix, (LPSTR)errbuf);		return &prbuf[0];  }int check_socket_status(int sd){	struct timeval wait;	fd_set send_ready,except;	wait.tv_sec =wait.tv_usec=0;	FD_ZERO(&send_ready);	FD_ZERO(&except);	FD_SET(sd,&send_ready);	FD_SET(sd,&except);	if(select(FD_SETSIZE,(fd_set *)0,&send_ready,			&except,&wait)<0)		return(-1);	if(FD_ISSET(sd,&send_ready))		return(0);	else if(FD_ISSET(sd,&except))		return(-2);	else		return(-3);}void SetStatusText(LPSTR tmp){                 	HDC hDC;		hDC =GetDC(NULL);	SetBkColor(hDC, RGB(255, 0, 255));	SetBkMode(hDC, TRANSPARENT);	TextOut(hDC, 10, 2, tmp, strlen(tmp));	ReleaseDC(NULL, hDC);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -