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

📄 stockclient.c

📁 用GTK+做用户界面 股票每日分时行情用数据库管理——MYSQL 软件应用方式客户端/服务器模式 基于TCP/IP的C/S通信模式 实现STOCK
💻 C
字号:
#include "gmclient.h"#include "stockclient.h"#include "stocktype.h"#include "jszb.h"stockClient::stockClient(char* host,int port,FILE* init_log):TcpClient(host,port,init_log){   loginserverflag = 0;   disconnectflag = 0;   stockerrno=0;}stockClient::~stockClient(){}int stockClient::read_all(void *buf,int n){   int nleft;   int nbytes;   char *ptr;     ptr=(char *)buf;   nleft = n;   for(;nleft > 0;){     nbytes = receive(ptr, nleft);     if(nbytes < 0){       if(errno == EINTR)          nbytes = 0;       else          return (-1);     }else if(nbytes == 0)        break;     nleft-=nbytes;     ptr+=nbytes;   }     return(n-nleft);}int stockClient::write_all(void *buf,int n){  int nleft;  int nbytes;  char *ptr;    nleft = n;  ptr=(char *)buf;  for(;nleft > 0;){    nbytes = send(ptr,nleft);    if(nbytes <= 0){       if(errno == EINTR)          nbytes = 0;       else          return(-1);    }        nleft-=nbytes;    ptr+=nbytes;  }  return(n);}int stockClient::dealDayKline(char *code){  int nbytes;  int retnum=0;  int tmpret;//  char tmp[256];  char cmdbuf[MAX_BUF_LEN];  char rspbuf[MAX_BUF_LEN];  char *databuf;   if(!loginserverflag) return FAIL;   if(strlen(code) != SHCODELEN && strlen(code) != SZCODELEN)      return FAIL;     bzero(cmdbuf,MAX_BUF_LEN);     bzero(rspbuf,MAX_BUF_LEN);     cmdbuf[0]=DAYKLINECMD;   if(strlen(code) == SHCODELEN){     if(!codeToName(SHBZ,code)) return FAIL;        cmdbuf[1]='1';       strncpy(&cmdbuf[2],code,SHCODELEN);   }    else{     if(!codeToName(SZBZ,code)) return FAIL;        cmdbuf[1]='2';       strncpy(&cmdbuf[2],code,SZCODELEN);   } //  info("connect from %s ", get_peer_addr(client_socket_fd));     fprintf(stderr,"send command.\n");       nbytes=send(cmdbuf,MAX_BUF_LEN);     if(nbytes < 0){        warn("send command error %s",strerror(errno));        return FAIL;     }     fprintf(stderr,"receive respon.\n");       nbytes=receive(rspbuf,MAX_BUF_LEN);     if(nbytes < 0){        warn("receive respon error %s",strerror(errno));        return FAIL;     }     if(rspbuf[0]=='0')        return FAIL;     if(rspbuf[0]==99){         bcopy(&rspbuf[1],&tmpret,sizeof(int));         retnum=ntohl(tmpret);         if(retnum <= 0) return FAIL;        fprintf(stderr,"receive data %d.\n",retnum);           databuf=           (char *)g_malloc(sizeof(char)*retnum*KLINERECLEN);         nbytes=read_all(databuf,retnum*KLINERECLEN);//         nbytes=receive(databuf,retnum*KLINERECLEN);         if(nbytes < 0){           warn("receive data error %s",strerror(errno));         return FAIL;         }       if(stock)         g_free(stock);       stock=(STOCK *)g_malloc(sizeof(STOCK)*(retnum+10));       int i;       char *ptr;       ptr=databuf;       for(i=1;i<=retnum;i++){         bcopy(ptr,&tmpret,4);         stock[i].jydate=ntohl(tmpret);         ptr+=4;         bcopy(ptr,&tmpret,4);         stock[i].kpj=ntohl(tmpret);         ptr+=4;         bcopy(ptr,&tmpret,4);         stock[i].zgj=ntohl(tmpret);         ptr+=4;         bcopy(ptr,&tmpret,4);         stock[i].zdj=ntohl(tmpret);         ptr+=4;         bcopy(ptr,&tmpret,4);         stock[i].spj=ntohl(tmpret);         ptr+=4;         bcopy(ptr,&tmpret,4);         stock[i].cjsl=ntohl(tmpret);         ptr+=4;         bcopy(ptr,&tmpret,4);         stock[i].cjje=ntohl(tmpret);         ptr+=4;       }      g_free(databuf);   }   stocksum=retnum;   strcpy(stockcode,code);   klinewidth=9;   areastart=stocksum-50;   mouselinex=stocksum;   createJszbData();  return retnum; }int stockClient::dealNameTbl(){  int nbytes,i;  int shretnum=0,szretnum=0;  int tmpret;  char *ptr;  float jg;//  char tmp[256];  char cmdbuf[MAX_BUF_LEN];  char rspbuf[MAX_BUF_LEN];  char *databuf;   if(!loginserverflag) return FAIL;   bzero(cmdbuf,MAX_BUF_LEN);   bzero(rspbuf,MAX_BUF_LEN);   ptr=cmdbuf;   *ptr=NAMETBLCMD;   ptr++;   nbytes=send(cmdbuf,MAX_BUF_LEN);   if(nbytes < 0){        warn("send command error %s",strerror(errno));        return FAIL;    }   nbytes=receive(rspbuf,MAX_BUF_LEN);   if(nbytes < 0){        warn("receive respon error %s",strerror(errno));        return FAIL;   }   ptr=rspbuf;   if(*ptr==RSPFAIL)      return FAIL;   if(*ptr==RSPTRUE){      ptr++;      bcopy(ptr,&tmpret,sizeof(int));      shretnum=ntohl(tmpret);      ptr+=LONGLEN;      bcopy(ptr,&tmpret,sizeof(int));      szretnum=ntohl(tmpret);      if(shretnum <= 0 && szretnum<=0) return FAIL;      fprintf(stderr,"receive data %d %d.\n",shretnum,szretnum);       databuf=        (char *)g_malloc(sizeof(char)*shretnum*SHNAMETBLRECLEN);      nbytes=read_all(databuf,shretnum*SHNAMETBLRECLEN);      if(nbytes < 0){         warn("receive data error %s",strerror(errno));         return FAIL;      }       if(shtbl)         g_free(shtbl);       shtbl=(STOCKNAMETBL  *)g_malloc(sizeof(STOCKNAMETBL)*(shretnum+10));       ptr=databuf;       for(i=1;i<=shretnum;i++){         shtbl[i].type=*ptr;         ptr++;         bcopy(ptr,shtbl[i].code,SHCODELEN);         ptr+=SHCODELEN;         bcopy(ptr,shtbl[i].name,STOCKNAMELEN);         ptr+=STOCKNAMELEN;         bcopy(ptr,&tmpret,4);         jg=ntohl(tmpret);         jg/=1000;         shtbl[i].zsp=jg;         ptr+=LONGLEN;       }       g_free(databuf);      databuf=         (char *)g_malloc(sizeof(char)*szretnum*SZNAMETBLRECLEN);      nbytes=read_all(databuf,szretnum*SZNAMETBLRECLEN);      if(nbytes < 0){         warn("receive data error %s",strerror(errno));         return FAIL;      }       if(sztbl)         g_free(sztbl);       sztbl=(STOCKNAMETBL *)g_malloc(sizeof(STOCKNAMETBL)*(szretnum+10));       ptr=databuf;       for(i=1;i<=szretnum;i++){         sztbl[i].type=*ptr;         ptr++;         bcopy(ptr,sztbl[i].code,SZCODELEN);         ptr+=SZCODELEN;         bcopy(ptr,sztbl[i].name,STOCKNAMELEN);         ptr+=STOCKNAMELEN;         bcopy(ptr,&tmpret,4);         jg=ntohl(tmpret);         jg/=1000;         sztbl[i].zsp=jg;         ptr+=LONGLEN;       }       g_free(databuf);   }  shstocksum=shretnum;  szstocksum=szretnum;  return SUCCESS; }int stockClient::dealLogin(char *tmpuser,char *tmppassword){  int nbytes;  char *ptr;  int rq;  int time;  int err;  char cmdbuf[MAX_BUF_LEN];  char rspbuf[MAX_BUF_LEN];       if(loginserverflag) return FAIL;      strcpy(user,tmpuser);   strcpy(password,tmppassword);        bzero(cmdbuf,MAX_BUF_LEN);   bzero(rspbuf,MAX_BUF_LEN);    ptr=cmdbuf;    *ptr=LOGINCMD;    ptr++;         bcopy(user,ptr,strlen(user));    ptr+=8;    bcopy(password,ptr,strlen(password));    ptr+=6;    rq=20000101;    rq=htonl(time);    bcopy(&rq,ptr,sizeof(rq));    ptr+=LONGLEN;    time=930;    time=htonl(time);    bcopy(&time,ptr,sizeof(time));    nbytes=send(cmdbuf,MAX_BUF_LEN);    if(nbytes < 0){        warn("send command error %s",strerror(errno));        return FAIL;    }     nbytes=receive(rspbuf,MAX_BUF_LEN);     if(nbytes < 0){        warn("receive respon error %s",strerror(errno));        return FAIL;     }         if(rspbuf[0]==RSPTRUE){        loginserverflag = SUCCESS;        return SUCCESS;     }     else{        bcopy(&rspbuf[1],&err,sizeof(err));        stockerrno=ntohl(err);        return FAIL;     }}int stockClient::dealDisconnect(){  int nbytes;  char *ptr;  char cmdbuf[MAX_BUF_LEN];  char rspbuf[MAX_BUF_LEN];    if(!status)  return FAIL;   //   if(!loginserverflag) return FAIL;   if(disconnectflag) return FAIL;        bzero(cmdbuf,MAX_BUF_LEN);   bzero(rspbuf,MAX_BUF_LEN);    ptr=cmdbuf;    *ptr=DISCONNECTCMD;    ptr++;         nbytes=send(cmdbuf,MAX_BUF_LEN);    if(nbytes < 0){        warn("send command error %s",strerror(errno));        return FAIL;    }     nbytes=receive(rspbuf,MAX_BUF_LEN);     if(nbytes < 0){        warn("receive respon error %s",strerror(errno));        return FAIL;     }         if(rspbuf[0]==RSPTRUE){        loginserverflag = FAIL;        disconnectflag =SUCCESS;        return SUCCESS;     }     else{        return FAIL;     }  }int stockClient::dealFsline(char *code){  int nbytes;  int retnum=0;  int tmpret;//  char tmp[256];  char cmdbuf[MAX_BUF_LEN];  char rspbuf[MAX_BUF_LEN];  char *databuf;  int i;  char *ptr;   if(!loginserverflag) return FAIL;   if(strlen(code) != SHCODELEN && strlen(code) != SZCODELEN)      return FAIL;     bzero(cmdbuf,MAX_BUF_LEN);     bzero(rspbuf,MAX_BUF_LEN);   cmdbuf[0]=FSLINECMD;   if(strlen(code) == SHCODELEN){//     if(!codeToName(SHBZ,code)) return FAIL;        cmdbuf[1]='1';       strncpy(&cmdbuf[2],code,SHCODELEN);   }    else{//     if(!codeToName(SZBZ,code)) return FAIL;        cmdbuf[1]='2';       strncpy(&cmdbuf[2],code,SZCODELEN);   } //  info("connect from %s ", get_peer_addr(client_socket_fd));//     fprintf(stderr,"send command.\n");       nbytes=send(cmdbuf,MAX_BUF_LEN);     if(nbytes < 0){        warn("send command error %s",strerror(errno));        return FAIL;     }//     fprintf(stderr,"receive respon.\n");       nbytes=receive(rspbuf,MAX_BUF_LEN);     if(nbytes < 0){        warn("receive respon error %s",strerror(errno));        return FAIL;     }     ptr=rspbuf;     if(*ptr==RSPFAIL)        return FAIL;     if(*ptr==RSPTRUE){         ptr++;         readGpmxFromBuf(ptr);         ptr+=GPMXRECLEN;         bcopy(ptr,&tmpret,sizeof(int));         tracesum=ntohl(tmpret);         ptr+=LONGLEN;         readTraceFromBuf(ptr);         ptr+=TRACERECLEN*TRACERECNUM;         bcopy(ptr,&tmpret,sizeof(int));         retnum=ntohl(tmpret);         if(retnum <= 0) return FAIL;//         fprintf(stderr,"receive data %d.\n",retnum);           databuf=           (char *)g_malloc(sizeof(char)*retnum*FSRECLEN);         nbytes=read_all(databuf,retnum*FSRECLEN);//         nbytes=receive(databuf,retnum*FSRECLEN);         if(nbytes < 0){           warn("receive data error %s",strerror(errno));         return FAIL;         }       ptr=databuf;       for(i=0;i<retnum && i<MAXFSLINENUM;i++){         bcopy(ptr,&tmpret,sizeof(tmpret));         fs[i].time=ntohl(tmpret);         ptr+=LONGLEN;         bcopy(ptr,&tmpret,sizeof(tmpret));         fs[i].price=ntohl(tmpret);         ptr+=LONGLEN;         bcopy(ptr,&tmpret,sizeof(tmpret));         fs[i].avgprice=ntohl(tmpret);         ptr+=LONGLEN;         bcopy(ptr,&tmpret,sizeof(tmpret));         fs[i].colume=ntohl(tmpret);         ptr+=LONGLEN;       }      g_free(databuf);   }   fssum=retnum;  return SUCCESS; }void stockClient::readGpmxFromBuf(char *buf){   char *ptr;   int tmpret;   float tmp;   ptr=buf;          bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.cjj=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.jj=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zd=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zdf=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zsp=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.kpj=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zgj=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zdj=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zss=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.xss=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.lb=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.wb=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.cjje=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.zf=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.wp=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.np=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mrj1=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mrj2=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mrj3=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mrl1=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mrl2=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mrl3=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mcj1=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mcj2=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mcj3=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mcl1=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mcl2=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    gpmx.mcl3=tmp/1000;    ptr+=LONGLEN;}void stockClient::readTraceFromBuf(char *buf){   int i;   char *ptr;   int tmpret;   float tmp;   ptr=buf;         for(i=0;i<tracesum && i<MAXTRACENUM;i++){    bcopy(ptr,&tmpret,sizeof(tmpret));    trace[i].no=htonl(tmpret);    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    trace[i].time=htonl(tmpret);    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    trace[i].price=tmp/1000;    ptr+=LONGLEN;    bcopy(ptr,&tmpret,sizeof(tmpret));    tmpret=ntohl(tmpret);    tmp=(float)tmpret;    trace[i].colume=tmp/1000;    ptr+=LONGLEN;    trace[i].bz=*ptr;    ptr++;   }}

⌨️ 快捷键说明

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