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

📄 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"HLOCAL hWSAData;int ret;int sdHq =-1;int PROTO_USE =PROTO_TCP;BOOL fInTransing =FALSE;#define WSA_MAKEWORD(x,y)       ((y) * 256 + (x))extern BOOL run_cancelled;LPSTR GetError(LPSTR err_prefix);char HostName[40];FILE *fp =NULL;extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);extern void PutInitString(LPSTR, LPSTR, LPSTR);extern BOOL ErrMsg(HWND, LPSTR);extern HWND ghWndMain;extern HINSTANCE ghInstance;extern HWND ghWndXlt, ghWndJlt, ghWndMaxMin;extern HWND ghDlgJy;//int PROTO_USE =PROTO_UDP;void WriteMsg(LPSTR msg){                	if(fp) fputs(msg, fp);}int PCTCPInit(void){	WORD VersionReqd;        	WSADATA myWSAData;                          char tmp[80];    	VersionReqd=WSA_MAKEWORD(MAJOR_VERSION, MINOR_VERSION);	hWSAData =LocalAlloc(LHND, sizeof(WSADATA));		ret = WSAStartup(VersionReqd, &myWSAData);	    	sdHq =-1;	if (ret != 0)	{		ErrMsg(NULL, GetError("WSAStartup()")); 		return -1;	}        	     	if(!GetInitString("NET", "HOST", HostName))	{		ErrMsg(NULL, "Not find HOST set in [NET] of init file");		PutInitString("NET", "HOST", "172.20.1.1");		return -1;	}    if(GetInitString("NET","PROTO_USE",tmp))    {        if(tmp[0]=='U' || tmp[0]=='u')            PROTO_USE =PROTO_UDP;        else            PROTO_USE =PROTO_TCP;    }    else        PutInitString("NET","PROTO_USE","TCP");	return 0;}int PCTCPClose(void){	int ret;	run_cancelled =TRUE;		WSACancelBlockingCall();	if(sdHq !=-1)	{		closesocket(sdHq);		sdHq =-1;    }		ret = WSACleanup();	if (ret == SOCKET_ERROR && h_errno == WSAEINPROGRESS)	{		//ErrMsg(NULL, "Data transfer in progress.\nStop transfer first.");		return -1;	}		return 0;}		int PCTCPExit(void){	static BOOL fExit =FALSE;		if(fExit ==TRUE) return 0;	fExit =TRUE;		PCTCPClose();		LocalUnlock(hWSAData);	LocalFree(hWSAData);		if(fp) fclose(fp);		return 0;}// used for clientint ConnectHost(void){	LPSTR lpHostName;	struct  hostent FAR *hp;	struct  sockaddr_in server_addr;    //SOCKET  hSock;    int hSock,i;	int iSockType;	long lret;	static BOOL fFirst =TRUE;		if(fFirst ==FALSE)	{		if(sdHq !=-1)		{			closesocket(sdHq);			sdHq =-1;		}	}	if(fFirst ==TRUE) fFirst =FALSE;	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;	if (PROTO_USE == PROTO_TCP)		iSockType = SOCK_STREAM;	else		iSockType = SOCK_DGRAM;    	server_addr.sin_port = htons((u_int) PORT_HQ);    	hSock = socket(PF_INET, iSockType, 0);	if (hSock == INVALID_SOCKET)	{		ErrMsg(NULL, "socket() failed");		return (SOCKET) -1;	}    	lret = 1L;    ioctlsocket(hSock, FIONBIO, (u_long FAR *) &lret);    i=0;    do    {        ret=connect(hSock,(struct sockaddr FAR *)&server_addr,sizeof(server_addr));    }while(ret ==SOCKET_ERROR && i++<9000);	sdHq =hSock;		return hSock;}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];  }#define 	DATA_START_SIGN		-16extern int Skip;int UDP_SendBuff(int sd, LPSTR SendBuf, int len){	int i, e;	char  far *WriteBuf;	static skip=0;	if(Skip>0)	{		skip++;		if(skip<Skip)			return len;	  	else	  	   	skip=0;	}		WriteBuf=_fmalloc((len+10) *sizeof(char ));	if(WriteBuf==NULL)	{		ErrMsg(NULL,"Alloc mem err!");		return  -1;	}	memset(&WriteBuf[0],0,sizeof(WriteBuf));	WriteBuf[0]=DATA_START_SIGN;	*(int *)&WriteBuf[1]=len;	memcpy(&WriteBuf[1+sizeof(int)],SendBuf,len);		for(i =0; i<10; i++)	{		len = send(sdHq, &WriteBuf[0], len +1 +sizeof(int), 0);				if (len == SOCKET_ERROR)		{			if ((e =h_errno) == WSAEWOULDBLOCK)				continue;			else if(e !=WSAENETRESET)			{				MessageBeep(0);				if(ConnectHost() <0) return -1;			}			else			{				//ErrMsg(NULL, "UDP_SendBuff failed");				return -1;			}		}		break;	}	_ffree(WriteBuf);	return i;}

⌨️ 快捷键说明

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