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