📄 sv_tcp.c
字号:
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(<ime); memcpy(&SendBuff[len], <ime, 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 + -