lalallala

    xiaoxiao2021-03-25  99

    #include<stdio.h>   #include<stdlib.h>   #include<string.h>   #include<errno.h>   #include<sys/types.h>   #include<sys/socket.h>   #include<netinet/in.h>    #define DEFAULT_PORT 8000   #define MAXLINE 4096  char* itoa(int num,char*str,int radix) {/*索引表*/ char index[]="0123456789ABCDEF"; unsigned unum;/*中间变量*/ int i=0,j,k; /*确定unum的值*/ if(radix==10&&num<0)/*十进制负数*/ { unum=(unsigned)-num; str[i++]='-'; } else unum=(unsigned)num;/*其他情况*/ /*转换*/ do{ str[i++]=index[unum%(unsigned)radix]; unum/=radix; }while(unum); str[i]='\0'; /*逆序*/ if(str[0]=='-')k=1;/*十进制负数*/ else k=0; char temp; for(j=k;j<=(i-1)/2;j++) { temp=str[j]; str[j]=str[i-1+k-j]; str[i-1+k-j]=temp; } return str; } int main()   {       int    socket_fd, connect_fd;       struct sockaddr_in     servaddr;       char   buff[4096] = {0};   char   sendBuf[4069];     int     n;   //通信协议 char tcp_flag[5]; char cmd_type[5]; char data_len[5]; int  cmd__; int  len__; char data[1024];     //初始化Socket       if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){       printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);       exit(0);       }       //初始化       memset(&servaddr, 0, sizeof(servaddr));       servaddr.sin_family = AF_INET;       servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。       servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT          //将本地地址绑定到所创建的套接字上       if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){       printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);       exit(0);       }       //开始监听是否有客户端连接       if( listen(socket_fd, 10) == -1){       printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);       exit(0);       }       printf("waiting for client's request\n");       while(1){   //阻塞直到有客户端连接,不然多浪费CPU资源。           if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){           printf("accept socket error: %s(errno: %d)",strerror(errno),errno);           continue;       }   //接受客户端传过来的数据       n = recv(connect_fd, buff, MAXLINE, 0);   // printf("len: %d\n",n); //向客户端发送回应数据    //   if(!fork()){     //提示连接成功 // char buf[100]; // tcp__ *p = (tcp__*)buf; // strcpy(p->packFlag,"@_hi"); // p->cmd_type = 0; // strcpy(p->data,"2"); // p->data_Len = 4*3+strlen("2")+1;   //      if( // send(connect_fd, buf, p->data_Len,0); // == -1)    //      perror("send error");       //    close(connect_fd);        //   exit(0);       //}       buff[n] = '\0'; int i,cmd__=0,len__=0; for(i=0; i<4; i++) tcp_flag[i] = buff[i]; for(i=4; i<8; i++) cmd_type[i-4] = buff[i]; for(i=8; i<12; i++) data_len[i-8] = buff[i]; for(i=12; i<n; i++) data[i-12] = buff[i]; for(i=0;i<4;i++){ cmd__+=cmd_type[i]; } for(i=0;i<4;i++){ len__+=data_len[i]; }    /* printf("recv data from client: %s\n", data);  printf("recv flag from client: %s\n", tcp_flag); printf("recv cmd from client: %d\n", cmd__); printf("recv length from client: %d\n", len__); */ char cmd_tcp[4]; cmd_tcp[0] = cmd__>>24; cmd_tcp[1] = cmd__>>16; cmd_tcp[2] = cmd__>>8; cmd_tcp[3] = cmd__; char len_tcp[4]; len_tcp[0] = len__>>24; len_tcp[1] = len__>>16; len_tcp[2] = len__>>8; len_tcp[3] = len__; printf("cmd_tcp:%d\n",strlen(cmd_tcp));         printf("tcp_flag:%d\n",strlen(tcp_flag));            char *t=(char*)malloc(sizeof(char) * (strlen(tcp_flag)+strlen(cmd_tcp)));      strcpy(t,tcp_flag);      strcat(t,cmd_tcp);         printf("  lianjie  hou t_length:%d\n\n\n\n\n\n",strlen(t));             char *tt=(char*)malloc(sizeof(char) * (strlen(t)+strlen(len_tcp)));        strcpy(tt,t);      strcat(tt,len_tcp); strcat(tt,"2");     int ll=strlen(tt); printf("len_tcp:%s\n",tt); printf("tcp_flaglength: %d\n",ll); send(connect_fd, tt, strlen(tt),0);     close(connect_fd);       }       close(socket_fd);  

    }  

    #include<stdio.h>   #include<stdlib.h>   #include<string.h>   #include<errno.h>   #include<sys/types.h>   #include<sys/socket.h>   #include<netinet/in.h>    #define DEFAULT_PORT 8000   #define MAXLINE 4096  char *intToBytes(int num) {           int i;         char *tt=(char*)malloc(sizeof(int) * (5));         for (i = 0; i < 4; ++i) {               int offset = 32 - (i + 1) * 8;               tt[i] = (char) ((num >> offset) & 0xff);              //printf("%d--",tt[i]);         }           return tt;       }  int bytesToInt(char bytes[]) {           int num = 0,i;           for (i = 0; i < 4; ++i) {               num <<= 8;               num |= (bytes[i] & 0xff);           }           return num;       } void mystrcat(char a[],char b[]){//把a和b拼接起来      int i=0,j=0;     while(a[i++]!='\0');      i--;     while(b[j]!='\0'){          a[i++]=b[j++];     }      a[i]='\0';  } int main()   {       int    socket_fd, connect_fd;       struct sockaddr_in     servaddr;       char   buff[4096] = {0};   char   sendBuf[4069];     int     n;   //通信协议 char tcp_flag[5]; char cmd_type[5]; char data_len[5]; int  cmd__; int  len__; char data[1024];     //初始化Socket       if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){       printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);       exit(0);       }       //初始化       memset(&servaddr, 0, sizeof(servaddr));       servaddr.sin_family = AF_INET;       servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。       servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT          //将本地地址绑定到所创建的套接字上       if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){       printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);       exit(0);       }       //开始监听是否有客户端连接       if( listen(socket_fd, 10) == -1){       printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);       exit(0);       }       printf("waiting for client's request\n");       while(1){       //阻塞直到有客户端连接,不然多浪费CPU资源。           if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){           printf("accept socket error: %s(errno: %d)",strerror(errno),errno);           continue;       }       //接受客户端传过来的数据       n = recv(connect_fd, buff, MAXLINE, 0);   int k; for(k=0;k<4;k++) tcp_flag[k]=buff[k]; for(k=4;k<8;k++) cmd_type[k-4]=buff[k]; for(k=8;k<12;k++) data_len[k-8]=buff[k]; for(k=12;k<n;k++)  data[k-12]=buff[k];     cmd__=bytesToInt(cmd_type); len__=bytesToInt(data_len);     //printf("len: %d\n",cmd__); /* char cmd_tcp[4],data_sec='2'; int j; j=sprintf(cmd_tcp,"%c%c%c%c%d%d%d%d%d%d%d%d",buff[0],buff[1],buff[2],buff[3],buff[4],buff[5],buff[6],buff[7],buff[8],buff[9],buff[10],buff[11],buff[12]); j+=sprintf(cmd_tcp+j,"%c",data_sec); */     char *cmd_tcp=(char*)malloc(sizeof(int) * (5)); cmd_tcp=intToBytes(cmd__); char *len_tcp=(char*)malloc(sizeof(int) * (5)); len_tcp=intToBytes(len__); char data__[2]="2";    // printf("cmd_tcp is:%s\n",cmd_tcp);      mystrcat(tcp_flag,cmd_tcp);      mystrcat(tcp_flag,len_tcp);      mystrcat(tcp_flag,data__);     //向客户端发送回应数据    if(!fork()){          if(send(connect_fd, tcp_flag, 13,0) == -1)           perror("send error");           close(connect_fd);           exit(0);       }      buff[n] = '\0'; printf("send msg: %s\n", tcp_flag);       close(connect_fd);       }       close(socket_fd);   }  

    转载请注明原文地址: https://ju.6miu.com/read-14736.html

    最新回复(0)