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

📄 sv_tcp.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
				if(JunkPack[i].sd==sd)					break;			}				if(JunkPack[i].sd==sd&&JunkPack[i].junk[0]==DATA_START_SIGN)			{				while(JunkPack[i].len<1+sizeof(short))				{					JunkPack[i].junk[JunkPack[i].len]=temp[prt];					JunkPack[i].len++;											prt++;					if(prt>=len)						return 0;				}				if(JunkPack[i].len+(len-prt)>=*(short*)&JunkPack[i].junk[1]+3)					{					memcpy(&JunkPack[i].junk[JunkPack[i].len],&temp[prt],						*(short*)&JunkPack[i].junk[1]-(JunkPack[i].len-3));					prt+=*(short*)&JunkPack[i].junk[1]-(JunkPack[i].len-3);					memset(&ReadBuf[0],0,MAX_RECV_BUF_SIZE);					memcpy(&ReadBuf[0],&JunkPack[i].junk[1+sizeof(short)],						*(short*)&JunkPack[i].junk[1]);					dataNum=*(short*)&JunkPack[i].junk[1];					memset(&JunkPack[i],0,sizeof(JUNK_PACK));										}				else				{					memcpy(&JunkPack[i].junk[JunkPack[i].len],&temp[prt],						len-prt);					JunkPack[i].len+=len-prt;					return 0;				}			}			else			{				ErrMsg(ghWndMain,"丢弃该数据包");				return -1;			}		}                       		else		{			if(prt+1+2>=len)			{				do				{					for(i=0;i<MAX_JUNK_PACK_COUNT;i++)					{						if(JunkPack[i].sd==0||								difftime(time(NULL),JunkPack[i].ltime)>MAX_JUNK_VALID_TIME)							break;					}					if(i>=MAX_JUNK_PACK_COUNT)						ShoutBlockingHook();										}while(i>=MAX_JUNK_PACK_COUNT);				JunkPack[i].sd=sd;				JunkPack[i].ltime=time(NULL);				memcpy(&JunkPack[i].junk[JunkPack[i].len],					&temp[prt],len-prt);				JunkPack[i].len=len-prt;				return 0;			}			dataNum=*(short *)&temp[prt+1];			if(dataNum<=0)			{				ErrMsg(ghWndMain,"数据长度错");				return -1;			}			if(prt+1+2+dataNum>len)			{				do				{					for(i=0;i<MAX_JUNK_PACK_COUNT;i++)					{						if(JunkPack[i].sd==0||								difftime(time(NULL),JunkPack[i].ltime)>MAX_JUNK_VALID_TIME)							break;					}					if(i>=MAX_JUNK_PACK_COUNT)						ShoutBlockingHook();										}while(i>=MAX_JUNK_PACK_COUNT);				JunkPack[i].sd=sd;				JunkPack[i].ltime=time(NULL);				memcpy(&JunkPack[i].junk[JunkPack[i].len],					&temp[prt],len-prt);				JunkPack[i].len=len-prt;				return 0;			}			else			{				memset(&ReadBuf[0],0,MAX_RECV_BUF_SIZE);				memcpy(&ReadBuf[0],&temp[prt+1+sizeof(short)],dataNum);				prt+=1+sizeof(short)+dataNum;			}		}       			UDP_ReadHq(sd,&ReadBuf[0],(int )dataNum,dest);		dataNum=0;			if(prt>=len)		{			dataNum=0;			return 0;               		}           }    return 0;        }int UDP_ReadHq(int sd,char * RecvBuf,int len,struct sockaddr_in dest){	int len1,ret;	BYTE FAR *lpTmp;    DEST_INFO *lpDest;										len1 = sizeof(dest);		if(len <=0)	{		ErrMsg(ghWndMain,"数据长度错1");		return -1;	}			lpTmp =&RecvBuf[0];		if(strncmp(HQ00_HEAD, RecvBuf, strlen(HQ00_HEAD)) ==0)	{		MsgRecv("行情00");		ret =UDP_Server_Send_Hq01(sd, &RecvBuf[strlen(HQ00_HEAD)],							(struct sockaddr* )&dest);		//if(ret <0)		//{		//	SendMsg(sd,"处理行情00错");		//	return -1;		//}	}       	else if(strncmp(XHQ00_HEAD, RecvBuf, strlen(XHQ00_HEAD)) ==0)	{		MsgRecv("行情00");		ret =Send_Hq01(sd, &RecvBuf[strlen(XHQ00_HEAD)],							(struct sockaddr* )&dest);		if(ret <0)		{			SendMsg(sd,"处理行情00错");			return -1;		}	}       	else if(strncmp(GRA00_HEAD, lpTmp, strlen(GRA00_HEAD)) ==0)	{		MsgRecv("分时图00");				ret =UDP_Server_Send_Gra01(sd, &RecvBuf[strlen(GRA00_HEAD)],				(struct sockaddr *)&dest);        if(ret <0)			SendMsg(sd,"处理分时图00错");	}	else if(strncmp(XGRA00_HEAD, lpTmp, strlen(GRA00_HEAD)) ==0)	{		Send_Gra01(sd, &RecvBuf[strlen(XGRA00_HEAD)],				(struct sockaddr *)&dest);	}	else if(strncmp(HQREF_HEAD, lpTmp, strlen(HQREF_HEAD)) ==0)	{		MsgRecv("数据采集机信息");		//Data_RefHq(lpTmp+strlen(HQREF_HEAD));	}	else if(strncmp(CLNT_EXIT, lpTmp, strlen(CLNT_EXIT)) ==0)	{		MsgRecv("退出");		HqDestStopBySd(sd);	}	else if(!strncmp(ZX_HEAD, lpTmp, strlen(ZX_HEAD)))	{		MsgRecv("资讯");		UDP_Server_Send_Zx(sd, lpTmp+strlen(ZX_HEAD), (struct sockaddr *)&dest);	}	else if(!strncmp(DATA_DAY_HEAD, lpTmp, strlen(DATA_DAY_HEAD)))	{		SendDataDay(sd, lpTmp+strlen(DATA_DAY_HEAD), (struct sockaddr *)&dest);	}	else if(!strncmp(DAY_DATA_HEAD, lpTmp, strlen(DAY_DATA_HEAD)))	{		SendDayData(sd, lpTmp+strlen(DAY_DATA_HEAD), (struct sockaddr *)&dest);	}	else if(!strncmp(GETZQMC_HEAD, lpTmp, strlen(GETZQMC_HEAD)))	{		UDP_Server_Send_GetZqmc(sd, lpTmp+strlen(GETZQMC_HEAD), (struct sockaddr *)&dest);	}	else if(!strncmp(HQ_CHKUSR_HEAD, lpTmp, strlen(HQ_CHKUSR_HEAD)))	{		MsgRecv("效验行情用户");		UDP_Server_Send_HqChkUsr(sd, lpTmp+strlen(HQ_CHKUSR_HEAD), (struct sockaddr *)&dest);	}	else if(!strncmp(STOCK_INFO_HEAD,lpTmp, strlen(STOCK_INFO_HEAD)))	{		MsgRecv("个股资料");        UDP_Send_File(sd,(FILE_INFO_FRAME *)(lpTmp+strlen(STOCK_INFO_HEAD)));	}	else if(!strncmp("SETENV",lpTmp,6))	{		if(Monitor.IsRun)		{            lpDest =GetDestBySd(sd);			if(lpDest!=NULL)			{				MsgRecv("环境设置");				ret =SetUserEnv(lpDest->recNum,(TCP_FRAME_HQ_ENV *)lpTmp,len);				if(ret ==SET_SUCC)					SendMsg(sd,"修改行情用户密码成功");				if(ret ==SET_PWD_ERROR)					SendMsg(sd,"输入的原密码错,不能修改行情用户密码");				if(ret ==SET_DATA_ERROR)					SendMsg(sd,"输入的数据有误,不能修改行情用户密码");				if(ret ==SET_SYS_ERROR)					SendMsg(sd,"主机系统有误,不能修改行情用户密码");			}			else			{				SendMsg(sd,"用户登录有误,不能修改行情用户密码");			}		}	}	else	{		SendMsg(sd,"未识行情数据包");    }	return 0;}extern short date_num;int UDP_Server_Send_Hq00(int sd, int jys, struct sockaddr *lpdest){	BYTE SendBuff[MAX_SEND_BUF_SIZE+1];	int len;	time_t ltime;		memset(&SendBuff[0],0, sizeof(SendBuff));	strcpy(SendBuff, HQ00_HEAD);	len =strlen(HQ00_HEAD)+sizeof(short);		SendBuff[len++] =(BYTE)jys;	*(short *)&SendBuff[len] =HqData[jys].recCount;	len +=sizeof(short);	memcpy(&SendBuff[len], &HqTime[jys], sizeof(HqTime[jys])-sizeof(BOOL));	len +=sizeof(HqTime[jys])-sizeof(BOOL);	time(&ltime);	memcpy(&SendBuff[len], &ltime, sizeof(ltime));	len +=sizeof(ltime);	SendBuff[len++] =(BYTE)date_num;	*(short *)&SendBuff[strlen(HQ00_HEAD)] =len;	return UDP_SendBuff("行情00", sd, SendBuff, len, NULL);}int UDP_Server_Send_Hq01(int sd, LPSTR lpTmp, struct sockaddr *lpdest){	BYTE SendBuff[MAX_SEND_BUF_SIZE+1];	short jys, recCount, recNum, sendCount, sendCount1, sendNum;	short recList[MAX_PARA_COUNT+1];	short i, j, len, len1;	BYTE client_version;	BOOL fRefresh, fSel, fFirstTime;		memset(&SendBuff[0],0, sizeof(SendBuff));	client_version =*lpTmp++;	if(client_version <SERVER_VERSION)	{		SendMsg(sd, "版本错!");		return 0;	}	jys =*lpTmp++;	fFirstTime =(BOOL)*lpTmp++;	if(fFirstTime)	{		if(UDP_Server_Send_Hq00(sd, jys, lpdest)<0)			return 0;	}	fRefresh =*lpTmp++;	fSel =*lpTmp++;	strcpy(SendBuff, HQ01_HEAD); 	len =strlen(HQ01_HEAD)+sizeof(short);	SendBuff[len++] =(BYTE)jys;	SendBuff[len++] =(BYTE)fRefresh;	SendBuff[len++] =(BYTE)fSel;	len1 =len;	recCount =*(short *)lpTmp;	if(recCount <=0 || recCount >MAX_PARA_COUNT) return -1;	lpTmp +=2;	*(short *)&SendBuff[len] =0;	len +=sizeof(short);		memset(recList, 0, sizeof(short)*MAX_PARA_COUNT);	recList[0] =recCount;	if(!fSel)	{		recNum =*(short *)lpTmp;		if(recNum >=HqData[jys].recCount)		{			ErrMsg(ghWndMain,"来自Send_Hq01:记录编号大于行情总数");			return -1;		}		if(recNum <0)		{			ErrMsg(ghWndMain,"来自Send_Hq01:记录编号小于零");			return -1;		}		lpTmp+=2;		//最大编号错		if(recNum +recCount-1 >=HqData[jys].recCount)		{			recCount =HqData[jys].recCount -recNum;			recList[0] =recCount;		}		for(i =0; i<recCount; i++)			recList[i+1] =recNum+i;	}	else            	{		memcpy(&recList[1], lpTmp, sizeof(short)*recCount);		lpTmp +=sizeof(short)*recCount;	}///////////////if(!fFirstTime)	goto check_dest;	sendCount1 =0;	for(i =0; i <=recCount/MAX_HQ_SEND_COUNT; i++)	{		sendCount =MAX_HQ_SEND_COUNT;		recNum =i*MAX_HQ_SEND_COUNT;		if(recNum+sendCount >recCount)			sendCount =recCount-recNum;		for(j =0; j<sendCount; j++)		{			sendNum =recList[1+recNum+j];			if(sendNum <0 || sendNum >=HqData[jys].recCount)			{				ErrMsg(ghWndMain,"来自Send_Hq01:列表参数错");				return -1;			}			if(!fRefresh)			{				*(short *)&SendBuff[len] =sendNum;				len+=2;				memcpy(&SendBuff[len], &HqData[jys].lpPreData[sendNum],					sizeof(HQ_PRE_DATA));				len +=sizeof(HQ_PRE_DATA);				memcpy(&SendBuff[len], &HqData[jys].lpRefData[sendNum],					sizeof(HQ_REF_DATA));				len +=sizeof(HQ_REF_DATA);				sendCount1++;			}			else			{				if(HqData[jys].lpRefData[sendNum].cjss !=*(int *)lpTmp)				{					*(short *)&SendBuff[len] =sendNum;					len+=2;					memcpy(&SendBuff[len], &HqData[jys].lpRefData[sendNum],						sizeof(HQ_REF_DATA));					len +=sizeof(HQ_REF_DATA);					sendCount1++;				}				lpTmp +=sizeof(int);			}			if(sendCount1 >=MAX_HQ_SEND_COUNT)			{				*(short *)&SendBuff[len1] =sendCount1;				*(short *)&SendBuff[strlen(HQ01_HEAD)] =len;				if(UDP_SendBuff("行情01", sd, SendBuff, len, NULL)<0)					return -1;				sendCount1 =0;				len =len1+sizeof(short);			}		}		if(sendCount1)		{			*(short *)&SendBuff[len1] =sendCount1;			*(short *)&SendBuff[strlen(HQ01_HEAD)] =len;			if(UDP_SendBuff("行情01", sd, SendBuff, len, NULL)<0)				return -1;		}	}check_dest:	if(fFirstTime)		CheckDest(sd, lpdest, jys, REQ_HQ10, recList, (short)(recCount+1),client_version);	else		CheckDest(sd, lpdest, jys, REQ_HQ01, recList, (short)(recCount+1),client_version);			if(fFirstTime)		UDP_Server_Send_Dp(sd, lpdest, TRUE, NULL);	return recCount;}int Delay_Send_Hq01(LPDEST_INFO lpDest){	BYTE SendBuff[MAX_SEND_BUF_SIZE+1];	short jys, recCount, recNum, sendCount, sendCount1, sendNum;	short recList[MAX_PARA_COUNT+1];	short i, j, len, len1;	BYTE client_version;	BOOL fRefresh, fSel, fFirstTime;	int sd;		memset(&SendBuff[0],0, sizeof(SendBuff));	sd =lpDest->sd;	client_version =lpDest->version;	if(client_version <SERVER_VERSION)	{		SendMsg(sd, "版本错!");		return 0;	}	jys =lpDest->curJys;	fFirstTime =FALSE;	fRefresh =FALSE;	fSel =TRUE; //*lpTmp++;	strcpy(SendBuff, HQ01_HEAD); 	len =strlen(HQ01_HEAD)+sizeof(short);	SendBuff[len++] =(BYTE)jys;	SendBuff[len++] =(BYTE)fRefresh;	SendBuff[len++] =(BYTE)fSel;	len1 =len;	recCount =lpDest->params[0];	if(recCount <=0 || recCount >MAX_PARA_COUNT) return -1;	*(short *)&SendBuff[len] =0;	len +=sizeof(short);		memset(recList, 0, sizeof(short)*MAX_PARA_COUNT);	recList[0] =recCount;	if(!fSel)	{		recNum =lpDest->params[1];		if(recNum >=HqData[jys].recCount)		{			ErrMsg(ghWndMain,"来自Send_Hq01:记录编号大于行情总数");			return -1;		}		if(recNum <0)		{			ErrMsg(ghWndMain,"来自Send_Hq01:记录编号小于零");			return -1;		}		//最大编号错		if(recNum +recCount-1 >=HqData[jys].recCount)		{			recCount =HqData[jys].recCount -recNum;			recList[0] =recCount;		}		for(i =0; i<recCount; i++)			recList[i+1] =recNum+i;	}	else            	{		memcpy(&recList[1], &lpDest->params[1], sizeof(short)*recCount);//		lpTmp +=sizeof(short)*recCount;	}		sendCount1 =0;	for(i =0; i <=recCount/MAX_HQ_SEND_COUNT; i++)	{		sendCount =MAX_HQ_SEND_COUNT;		recNum =i*MAX_HQ_SEND_COUNT;		if(recNum+sendCount >recCount)			sendCount =recCount-recNum;		for(j =0; j<sendCount; j++)		{			sendNum =recList[1+recNum+j];			if(sendNum <0 || sendNum >=HqData[jys].recCount)			{				ErrMsg(ghWndMain,"来自Send_Hq01:列表参数错");				return -1;			}			//if(!fRefresh)			//{				*(short *)&SendBuff[len] =sendNum;				len+=2;				memcpy(&SendBuff[len], &HqData[jys].lpPreData[sendNum],					sizeof(HQ_PRE_DATA));				len +=sizeof(HQ_PRE_DATA);				memcpy(&SendBuff[len], &HqData[jys].lpRefData[sendNum],					sizeof(HQ_REF_DATA));				len +=sizeof(HQ_REF_DATA);				sendCount1++;			//}			//else			//{			//	if(HqData[jys].lpRefData[sendNum].cjss !=*(int *)lpTmp)			//	{			//		*(short *)&SendBuff[len] =sendNum;			//		len+=2;			//		memcpy(&SendBuff[len], &HqData[jys].lpRefData[sendNum],			//			sizeof(HQ_REF_DATA));			//		len +=sizeof(HQ_REF_DATA);			//		sendCount1++;			//	}			//}			if(sendCount1 >=MAX_HQ_SEND_COUNT)			{				*(short *)&SendBuff[len1] =sendCount1;				*(short *)&SendBuff[strlen(HQ01_HEAD)] =len;				if(UDP_SendBuff("行情01", sd, SendBuff, len, NULL)<0)				{					lpDest->reqType =REQ_HQ10;							return -1;				}				sendCount1 =0;				len =len1+sizeof(short);			}		}		if(sendCount1)		{			*(short *)&SendBuff[len1] =sendCount1;			*(short *)&SendBuff[strlen(HQ01_HEAD)] =len;			if(LOW_UDP_SendBuff("行情01", sd, SendBuff, len, NULL,lpDest)<0)			{				lpDest->reqType =REQ_HQ10;						return -1;			}		}	}	lpDest->reqType =REQ_HQ10;			return j;}int Send_Hq01(int sd, LPSTR lpTmp, struct sockaddr *lpdest){	char * SendBuff;	short jys, recCount, recNum, sendCount, sendCount1, sendNum;	short recList[MAX_PARA_COUNT+1];	short i, j, len, len1;	BYTE client_version;	BOOL fRefresh, fSel, fFirstTime;		client_version =*lpTmp++;	if(client_version <SERVER_VERSION)	{		SendMsg(sd, "版本错!");		return 0;	}	jys =*lpTmp++;	fFirstTime =(BOOL)*lpTmp++;

⌨️ 快捷键说明

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