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