lalallala

#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);  
}  











































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值