服务端:
#include<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define LS 1
#define CD 2
#define PWD 3
#define GET 4
#define PUT 5
#define QUIT 6
typedef struct smg
{
int w;
char cmd[1024];
char msg[2048];
}STM;
int zhuanhuan(char readbuf[])
{
if(strcmp(readbuf,"ls")==0)
{
return LS;
}
if(strcmp(readbuf,"pwd")==0)
{
return PWD;
}
if(strstr(readbuf,"cd")!=NULL)
{
return CD;
}
if(strstr(readbuf,"get")!=NULL)
{
return GET;
}
if(strstr(readbuf,"put")!=NULL)
{
return PUT;
}
if(strcmp(readbuf,"quit")==0)
{
return QUIT;
}
}
char *fenge(char readbuf[])
{
char *p=strtok(readbuf," ");
p=strtok(NULL," ");
return p;
}
void fenxi(STM happy,int a_num)
{
int a=zhuanhuan(happy.cmd);
char ppp[2048];
switch(a)
{
case PWD:
case LS:
{
FILE *file1=popen("ls","r");
memset(ppp,0,2048);
fread(ppp,1,2048,file1);
write(a_num,ppp,sizeof(ppp));
break;
}
case CD:
{
printf("jinru cd\n");
char *p=fenge(happy.cmd);
chdir(p);
break;
}
case GET:
{
char *p=fenge(happy.cmd);
int w=open(p,O_RDWR);
memset(ppp,0,2048);
read(w,ppp,2048);
close(w);
write(a_num,ppp,sizeof(ppp));
break;
}
case PUT:
{
char *p=fenge(happy.cmd);
int w=open(p,O_RDWR|O_CREAT|O_TRUNC,0600);
char str[2048];
strcpy(str,happy.msg);
int aa=strlen(str);
str[aa]='\0';
write(w,str,strlen(str));
close(w);
break;
}
case QUIT:
{
printf("quit\n");
exit(-1);
break;
}
}
}
int main(int argc,char **argv)
{
if(argc!=3)
{
printf("3 canshu,SB\n");
exit(-1);
}
int s_num=socket(AF_INET,SOCK_STREAM,0);
int a_num;
int r_num;
struct sockaddr_in addr;
struct sockaddr_in addrrcv;
char readbuf[128]={0};
memset(readbuf,0,128);
int fork1;
addr.sin_family=AF_INET;
addr.sin_port=htons(atoi(argv[2]));
inet_aton(argv[1],&addr.sin_addr);
bind(s_num,(struct sockaddr *)&addr,sizeof(struct sockaddr_in));
listen(s_num,10);
int size=sizeof(struct sockaddr_in);
STM msgbody;
while(1)
{
a_num=accept(s_num,(struct sockaddr *)&addrrcv,&size);
printf("connect:%s\n",inet_ntoa(addrrcv.sin_addr));
fork1=fork();
if(fork1==0)
{
while(1)
{
memset(&msgbody,0,sizeof(STM));
r_num=read(a_num,&msgbody,sizeof(STM));
if(r_num==-1)
{
perror("read");
}
else
{
fenxi(msgbody,a_num);
}
}
}
}
return 0;
}
客户端:
#include<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define LS 1
#define CD 2
#define PWD 3
#define GET 4
#define PUT 5
#define QUIT 6
#define LLS 7
#define LCD 8
#define LPWD 9
int zhuanhuan(char readbuf[])
{
if(strcmp(readbuf,"ls")==0)
{
return LS;
}
if(strcmp(readbuf,"pwd")==0)
{
return PWD;
}
if(strstr(readbuf,"cd")!=NULL)
{
return CD;
}
if(strstr(readbuf,"get")!=NULL)
{
return GET;
}
if(strstr(readbuf,"put")!=NULL)
{
return PUT;
}
if(strcmp(readbuf,"quit")==0)
{
return QUIT;
}
if(strcmp(readbuf,"lls")==0)
{
return LLS;
}
if(strcmp(readbuf,"lpwd")==0)
{
return LPWD;
}
if(strstr(readbuf,"lcd")!=NULL)
{
return LCD;
}
}
char *fenge(char readbuf[])
{
char *p=strtok(readbuf," ");
p=strtok(NULL," ");
return p;
}
typedef struct smg
{
int w;
char cmd[1024];
char msg[2048];
}STM;
int main(int argc,char **argv)
{
if(argc!=3)
{
printf("3 canshu,SB");
exit(-1);
}
int s_num=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in addr;
char readbuf[2048];
memset(readbuf,0,2048);
char writebuf[1024]={0};
addr.sin_family=AF_INET;
addr.sin_port=htons(atoi(argv[2]));
inet_aton(argv[1],&addr.sin_addr);
int r_num;
int size=sizeof(struct sockaddr_in);
STM msgbody;
connect(s_num,(struct sockaddr *)&addr,sizeof(struct sockaddr_in));
while(1)
{
memset(&msgbody.cmd,0,1024);
gets(msgbody.cmd);
int a=zhuanhuan(msgbody.cmd);
if(a==PWD||a==LS)
{
write(s_num,&msgbody,sizeof(STM));
memset(readbuf,0,2048);
read(s_num,readbuf,2048);
int w=strlen(readbuf);
readbuf[w-1]='\0';
printf("----------------------------------------\n");
puts(readbuf);
printf("----------------------------------------\n");
}
else if(a==CD)
{
write(s_num,&msgbody,sizeof(STM));
}
else if(a==PUT)
{
char uuu[1024];
strcpy(uuu,msgbody.cmd);
char *p=fenge(msgbody.cmd);
int o=open(p,O_RDWR);
int w=read(o,&msgbody.msg,2048);
close(o);
strcpy(msgbody.cmd,uuu);
write(s_num,&msgbody,sizeof(STM));
}
else if(a==GET)
{
write(s_num,&msgbody,sizeof(STM));
char *p=fenge(msgbody.cmd);
memset(readbuf,0,2048);
read(s_num,readbuf,2048);
int aa=strlen(readbuf);
readbuf[aa]='\0';
int o=open(p,O_RDWR|O_CREAT|O_TRUNC,0600);
write(o,readbuf,strlen(readbuf));
close(o);
}
else if(a==QUIT)
{
write(s_num,&msgbody,sizeof(STM));
exit(0);
}
else if(a==LLS||a==LPWD)
{
FILE *file1=popen("ls","r");
memset(readbuf,0,2048);
fread(readbuf,1,2048,file1);
printf("----------------------------------------\n");
puts(readbuf);
printf("----------------------------------------\n");
}
else if(a==LCD)
{
char *p=fenge(msgbody.cmd);
chdir(p);
}
}
return 0;
}