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

📄 jy_tcp.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
字号:
#include <windows.h>#include <string.h>#include <time.h>#include <winsock.h>#include "pctcp.h"#include "hq.h"#include "jy_cl.h"#include "caption.h"#include "des.h"#include "rsa.h"#include "msg.h"BOOL udpread_stop =TRUE;extern BOOL gfOnLine,gfConnecting;extern JY_ANS_CHKUSR ChkUsrRes;extern ZQSXX Qsxx;extern BOOL ErrMsg(HWND, LPSTR);extern HWND ghWndMain, ghDlgJy;extern BOOL run_cancelled;extern int sdJy;    extern BOOL IsSzRead,IsShRead;char  *JyReadBuf;	//[MAX_READ_BUF_SIZE+1];  uchar DesKey[9];	int UDP_Client_ReadJy(void);extern LPSTR GetError(LPSTR);LPVOID lpCurJyData =NULL, lpCurJyRes =NULL, lpCurJyHead =NULL;int curJyDataSize =0, curJyHead =0, curJyResSize =0;BOOL fIsJyCx =FALSE;HINSTANCE hDesDll=NULL;lpfnDES_INIT far pascal desinit=NULL;lpfnDES_ECB far pascal ecbencode=NULL;int UDP_Client_JySend(LPSTR, LPVOID, int, LPVOID, int);int UDP_Jy_ChkUsr(LPJY_ASK_CHKUSR lpChkUsrData, LPJY_ANS_CHKUSR lpChkUsrRes){	fIsJyCx =FALSE;	return UDP_Client_JySend(JY_CHKUSR_HEAD, lpChkUsrData, sizeof(JY_ASK_CHKUSR),			lpChkUsrRes, sizeof(JY_ANS_CHKUSR));}int UDP_Jy_ChgPwd(LPJY_ASK_CHGPWD lpChgPwdData, LPJY_ANS_CHGPWD lpChgPwdRes){	fIsJyCx =FALSE;	return UDP_Client_JySend(JY_CHGPWD_HEAD, lpChgPwdData, sizeof(JY_ASK_CHGPWD),			lpChgPwdRes, sizeof(JY_ANS_CHGPWD));}int UDP_Jy_BuySell(LPJY_ASK_BUYSELL lpBuySellData, LPJY_ANS_BUYSELL lpBuySellRes){	fIsJyCx =FALSE;	return UDP_Client_JySend(JY_BUYSELL_HEAD, lpBuySellData, sizeof(JY_ASK_BUYSELL),			lpBuySellRes, sizeof(JY_ANS_BUYSELL));}int UDP_Jy_Cancel(LPJY_ASK_CANCEL lpCancelData, LPJY_ANS_CANCEL lpCancelRes){	fIsJyCx =FALSE;	return UDP_Client_JySend(JY_CANCEL_HEAD, lpCancelData, sizeof(JY_ASK_CANCEL),			lpCancelRes, sizeof(JY_ANS_CANCEL));}int UDP_Jy_Wtcx(LPJY_ASK_WTCX lpWtcxData, LPJY_ANS_WTCX lpWtcxRes){	fIsJyCx =TRUE;	return UDP_Client_JySend(JY_WTCX_HEAD, lpWtcxData, sizeof(JY_ASK_WTCX),			(LPVOID)lpWtcxRes, sizeof(JY_ANS_WTCX));}int UDP_Jy_Cjcx(LPJY_ASK_CJCX lpCjcxData, LPJY_ANS_CJCX lpCjcxRes){	fIsJyCx =TRUE;	return UDP_Client_JySend(JY_CJCX_HEAD, (LPVOID)lpCjcxData, sizeof(JY_ASK_CJCX),			(LPVOID)lpCjcxRes, sizeof(JY_ANS_CJCX));}int UDP_Jy_Yecx(LPJY_ASK_YECX lpYecxData, LPJY_ANS_YECX lpYecxRes){	fIsJyCx =TRUE;	return UDP_Client_JySend(JY_YECX_HEAD, (LPVOID)lpYecxData, sizeof(JY_ASK_YECX),			lpYecxRes, sizeof(JY_ANS_YECX));}char en[43]={'A','=','U','X','Z','E','R','P','4','W','5','S','Q','B','7','O',	     '<','1','V','Y','?','0','L','N','T','@','6','F','C','9','D','G',	 '>',';','H','3','J','K',':','2','I','M','8'};int gn_jy_num =0;#define 	DATA_START_SIGN -16int UDP_Client_JySend(LPSTR lpHead, LPVOID lpData, int DataSize, LPVOID lpRes, int ResSize){	int len,i= 0,x,tlen;	char JyWriteBuf[MAX_WRITE_BUF_SIZE+1],temp[100];    static uchar * b;    	if(HqTime[*(char *)lpData].fRunning ==FALSE)	{		ErrMsg(ghDlgJy, "已经收市!");		return 0;	}		if(!gfOnLine||gfConnecting) return 0;				udpread_stop =FALSE;	lpCurJyData =NULL;	lpCurJyRes =NULL;	lpCurJyHead =NULL;	curJyDataSize =0;	curJyResSize =0;	 	memset(&JyWriteBuf[0], 0,sizeof(JyWriteBuf));	JyWriteBuf[0]=DATA_START_SIGN;	len=1+sizeof(int);		strcpy(&JyWriteBuf[len], lpHead);	len += strlen(lpHead);		gn_jy_num ++;	*(short *)&JyWriteBuf[len] =gn_jy_num;		len +=sizeof(short);	memcpy(&JyWriteBuf[len], lpData, DataSize);	len +=DataSize;        *(int*)&JyWriteBuf[1]= len - 1 - sizeof(int);        if(hDesDll!=NULL)    {  		desinit(DesKey);  		for(b=&JyWriteBuf[3],i=len-3;i>0;i-=8,b+=8)  		{  			if(i<8) break;  			ecbencode(b,b);  		}  	}  	  	if(hDesDll!=NULL &&RsaOk &&  		strncmp(lpHead,JY_CHKUSR_HEAD,strlen(JY_CHKUSR_HEAD)) ==0)  	{  		memset(temp,0,100);  		BytToStr(RsaKey,temp);  		memcpy(&JyWriteBuf[len],temp,100);  		len +=100;  		memcpy(&JyWriteBuf[len],"RSAKEY",6);  		len +=6;  		*(int*)&JyWriteBuf[1]= len - 1 - sizeof(int);  	}  		for(i=1+sizeof(int);i<len;i++)	{		if(JyWriteBuf[i]>='0'&&JyWriteBuf[i]<='Z')		{			JyWriteBuf[i]=en[JyWriteBuf[i]-'0'];		}	}  	tlen = len;	for(x=0;;)	{	    DrawTime(1);		len = send(sdJy,&JyWriteBuf[x], tlen -x, 0);		if (len == SOCKET_ERROR)		{			if ((len =h_errno) == WSAEWOULDBLOCK)			{				DrawTime(YELLOW_SIGN);				continue;			}			else if(len !=WSAENETRESET)			{				ErrMsg(ghDlgJy, GetError("translate jy"));				DrawTime(RED_SIGN);				return(-1);			}		}		if(x+len !=tlen)			x+=len;		else			break;	}		lpCurJyData =lpData;	lpCurJyRes =lpRes;	lpCurJyHead =lpHead;	curJyDataSize =DataSize;	curJyResSize =ResSize;	*(char *)lpCurJyRes =ANS_UNKOWN;		DrawTime(0);	return len;}#define		DATA_HEAD_SIZE	3char JydataHead[DATA_HEAD_SIZE+1];int  JyHeadPrt=0,JydataPrt=0 ;int AnaJyRecvData(void){  int prt,len,try_times,dataNum;  char temp[MAX_READ_BUF_SIZE+1];     prt=len=try_times=dataNum=0;   retry_read:	if(try_times ++>10)	{		ErrMsg(ghDlgJy, "recv error");		return -1;	}		memset((char *)&temp[0],0,MAX_READ_BUF_SIZE*sizeof(char));  	DrawTime(1);		len = recv(sdJy,(char *)&temp[0],MAX_READ_BUF_SIZE*sizeof(char),0);	if (len == SOCKET_ERROR) 	{		if (h_errno == WSAEWOULDBLOCK)			goto retry_read;		else		{			ErrMsg(ghDlgJy, GetError("recv cancel error"));			if(ConnectHost(0, -1)<0)			{				ErrMsg(ghDlgJy, "Reconnect failed");				DrawTime(2);				return -1;			}		}	}	if(len <=0)	{   		DrawTime(2);	 	return -1;    }    if(len>4)    {            	if(temp[0]==DATA_START_SIGN && JyHeadPrt!=0 && temp[3]>='A' && temp[3]<='Z')    	{     		JydataPrt=0;      		JyHeadPrt=0;    	}	    }            while(prt<len)    {     	if(JyHeadPrt<DATA_HEAD_SIZE)     	{     		if(JyHeadPrt==0)     		{     			if(temp[prt]!=DATA_START_SIGN)     			{     				prt++;     				DrawTime(2);     				continue;     			}     			     			else     			{     				DrawTime(1);     			     			    JydataHead[JyHeadPrt]=temp[prt];     			    JyHeadPrt++;     				prt++;     			}	     		}     		if(prt>=len)     		{     			DrawTime(2);     		     			return 0;     		}	     		if(DATA_HEAD_SIZE - JyHeadPrt	>len-prt)     		{     			memcpy((char*)&JydataHead[JyHeadPrt],(char*)&temp[prt],len-prt);     			JyHeadPrt+=len-prt;     			DrawTime(2);     			return 0;     		}     		else     		{     			memcpy((char*)&JydataHead[JyHeadPrt],(char*)&temp[prt],DATA_HEAD_SIZE - JyHeadPrt);     			prt+=DATA_HEAD_SIZE - JyHeadPrt;     			JyHeadPrt=DATA_HEAD_SIZE;     		}     			     	}     	     	if(prt>=len)     	{     	    DrawTime(2);     		return 0;     	}	     	dataNum=*(int *)&JydataHead[1];     	if(dataNum<=0)     	{			MessageBeep(0);     				DrawTime(2);     		return -1;     	}     	if(dataNum-JydataPrt  > len - prt)     	{     		memcpy((char FAR *)&JyReadBuf[JydataPrt],(char*)&temp[prt],len-prt);     		JydataPrt+=len-prt;     		DrawTime(2);     		     		return 0;     	}     	else     	{     		memcpy((char FAR *)&JyReadBuf[JydataPrt],(char*)&temp[prt],dataNum-JydataPrt);     		prt+=dataNum-JydataPrt;     		JydataPrt=dataNum;     		UDP_Client_ReadJy();     		JydataPrt=0;      		JyHeadPrt=0;     		dataNum=0;     	}     	     	if(prt>=len)     	{        		DrawTime(0);     		     		return 0;     		     	}	    }    DrawTime(0);     		    return 0;        }int UDP_Client_ReadJy(void){	int len, jy_num;	LPSTR lpTmp;	int retry_times =0;			lpTmp =&JyReadBuf[0];	if(!strnicmp(JY_ZQSXX_HEAD,lpTmp,sizeof(JY_ZQSXX_HEAD)))	{		lpTmp +=strlen(JY_ZQSXX_HEAD);				//memset(&Qsxx, 0, sizeof(ZQSXX));		//memcpy(&Qsxx,lpTmp,sizeof(ZQSXX));		if(*(lpTmp+DATALENGTH -1) !=0)		{   			Msg("正在初始化交易加密参数,请您稍候...",MSG_VERT);			gfConnecting =TRUE;			WriteRsaPk(JyQs,lpTmp,lpTmp+DATALENGTH);					EncipherDesKey(DesKey,lpTmp,lpTmp+DATALENGTH,RsaKey);			WriteRsaCiper(JyQs,RsaKey,DesKey);			RsaOk =1;			DispQsName(JyQs,RsaOk);						Msg("",MSG_HIDE);			gfConnecting =FALSE;		}		else			RsaOk =0;		return 0;	}	len=JydataPrt;	if(len ==0) return -1;	if(lpCurJyData ==NULL) return -1;		if(strnicmp(lpCurJyHead, lpTmp, strlen(lpCurJyHead)))	{		MessageBeep(0);		return -1;	}	lpTmp +=strlen(lpCurJyHead);	len -=strlen(lpCurJyHead);	jy_num =*(short *)lpTmp;	lpTmp +=sizeof(short);	len -=sizeof(short);	if(jy_num !=gn_jy_num) return -1;	if(len ==1)	{		*(char *)lpCurJyRes =*lpTmp;    //cx_end, sys_err, time_out, other ret_err...		goto read_ok;	}		if(!fIsJyCx && len !=curJyResSize)	{		MessageBeep(0);		return -1;	}	memcpy(lpCurJyRes, lpTmp, curJyResSize);read_ok:	if(fIsJyCx)		SendMessage(ghDlgJy, WM_JYCX_RES, 0, 0L);	else		SendMessage(ghDlgJy, WM_JY_RES, 0, 0L);		return 0;}void SendJyExit(char *lpgddm){	char SendBuff[100];	int i, len,x,tlen;		memset(&SendBuff[0],0,sizeof(SendBuff));	SendBuff[0]=DATA_START_SIGN;	len = 1 + sizeof(int );		memcpy(&SendBuff[len], JY_EXIT,strlen(JY_EXIT));	len += strlen(JY_EXIT);		memcpy(&SendBuff[len], lpgddm ,strlen(lpgddm));	len +=strlen(lpgddm);		SendBuff[len++] =0;	SendBuff[len] =0;	*(int *)&SendBuff[1] =	len -1 -sizeof(int );	    len= len -1 - sizeof( int );        for(i=0;i<len;i++)    {		if(SendBuff[i+1+sizeof(int)]>='0'&&SendBuff[i+1+sizeof(int)]<='Z')		{	    	SendBuff[i+1+sizeof(int)]=en[SendBuff[i+1+sizeof(int)]-'0'];		}    }		len = len +1 + sizeof(int);	DrawTime(1);	tlen =len;	for(x=0;;)	{		len =send(sdJy, &SendBuff[x], tlen -x, 0);		if (len == SOCKET_ERROR)		{			if (h_errno == WSAEWOULDBLOCK)				continue;			else 				return;		}		if(x+len !=tlen)			x+=len;		else			break;	}	DrawTime(0);     				}void SendJyQsxx(void){	char SendBuff[100];	int i, len ,tlen,x;		memset(&SendBuff[0],0,sizeof(SendBuff));	SendBuff[0]=DATA_START_SIGN;	len = 1 + sizeof(int );		memcpy(&SendBuff[len], JY_ZQSXX_HEAD,strlen(JY_ZQSXX_HEAD));	len += strlen(JY_ZQSXX_HEAD);		SendBuff[len] =0;		*(int *)&SendBuff[1] =	len -1 -sizeof(int );	    len= len -1 - sizeof( int );        for(i=0;i<len;i++)    {		if(SendBuff[i+1+sizeof(int)]>='0'&&SendBuff[i+1+sizeof(int)]<='Z')		{	    	SendBuff[i+1+sizeof(int)]=en[SendBuff[i+1+sizeof(int)]-'0'];		}    }		len = len +1 + sizeof(int);		DrawTime(1);     					tlen =len;	for(x =0;;)	{		len =send(sdJy, &SendBuff[x],tlen -x, 0);		if (len == SOCKET_ERROR)		{			if (h_errno == WSAEWOULDBLOCK)				continue;			else 				return;		}		if(len+x!=tlen)			x+=len;		else			break;	}	DrawTime(0);     					}

⌨️ 快捷键说明

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