/*************************************************************************
************************************************************************/
https://www.cnblogs.com/machangwei-8/p/10403533.html
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#define IP "127.0.0.1"
#define SPORT 10086
#define CPORT 10010
#define SIZE 100
int uploadFile(int socket,char * pathname);
int downloadFile(int socket,char * pathname);
int main(int argc,char *argv[])
{
//定义变量
int on = 1;
int ret = 0;
int socketID = 0;
int newID = 0;
int addrLength = sizeof(struct sockaddr_in);
struct sockaddr_in myAddr;
struct sockaddr_in addr;
int addrLength1 = 0;
char buf[SIZE] = {0};
DIR *dirptr = NULL;
struct dirent *entry = NULL;
//打开socket(确定协议)
socketID = socket(AF_INET,SOCK_STREAM,0);
setsockopt(socketID, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
if (socketID < 0 )
{
perror("socket error");
return -1;
}
printf("socketID = %d\n",socketID);
//绑定自己ip&&port
memset(&myAddr,0,addrLength);
myAddr.sin_family =AF_INET;
myAddr.sin_port = htons(SPORT);
myAddr.sin_addr.s_addr = INADDR_ANY;
ret = bind(socketID,(struct sockaddr *)&myAddr,addrLength);
if( ret < 0 )
{
perror("bind error");
return -1;
}
//监听
listen(socketID,8);
//建立连接
newID = accept(socketID,(struct sockaddr *)&addr,&addrLength1);
printf("newID = %d\n",newID);
//接受信息
while(1)
{
ret = recv(newID,buf,sizeof(buf),0);
if(strcmp(buf,"look")==0)
{
dirptr = opendir("./");
if(dirptr== NULL)
{
printf("open dir !");
}
else
{
while (1)
{
entry = readdir(dirptr);
if(NULL == entry)
break;
if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0)
continue;
printf("%s\n",entry->d_name);
entry->d_name[strlen(entry->d_name)] ='\n';
send(newID,entry->d_name,strlen(entry->d_name),0);
}
printf("12345678\n");
}
}
else if(strcmp(buf,"download")==0)
{
printf("qwe\n");
memset(buf,0,sizeof(buf));
recv(newID,buf,sizeof(buf),0);
ret = downloadFile(newID,buf);
if(ret == 0)
{
printf("downloadFile over!\n");
}
}
else if(strcmp(buf,"upload")==0)
{
memset(buf,0,sizeof(buf));
while(1)
{
ret = recv(newID,buf,5,0);
if(ret == 0)
break;
}
printf("a=%s\n",buf);
strcpy(buf,"ok!");
send(newID,buf,strlen(buf),0);
ret = uploadFile(newID,buf);
printf("uploadFile over!\n");
if(ret == 0)
{
printf("uploadFile over!\n");
}
}
}
close(newID);
//关闭socket
close(socketID);
return 0;
}
int downloadFile(int socket,char * pathname)
{
int ret = 0;
int fd = 0;
int sum = 0;
char buf[SIZE] = {0};
printf("pathname = %s\n",pathname);
fd = open(pathname,O_RDONLY,0666);
if(fd < 0)
{
perror("open error");
return -1;
}
while(1)
{
ssize_t ret1 = read(fd,buf,sizeof(buf));
if(ret1 < 0)
{
perror("read error");
return -1;
}
else if(0<ret1)
{
ret = send(socket,buf,ret1,0);
sum =+ ret1;
}
else
{
printf("read over!\n");
break;
}
}
printf("sum = %d\n",sum);
close(fd);
return 0;
}
int uploadFile(int socket,char * pathname)
{
int ret = 0;
int fd = 0;
char buf[SIZE] = {0};
printf("pathname = %s\n",pathname);
fd = open(pathname,O_CREAT|O_WRONLY,0666);
if(fd < 0)
{
perror("open error");
return -1;
}
while(1)
{
ret = recv(socket,buf,sizeof(buf),0);
if( ret == 0 )
{
break;
}
if( ret >0 )
{
write(fd,buf,ret);
}
}
close(fd);
return 0;
}
/*************************************************************************
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#define IP "127.0.0.1"
#define SPORT 10086
#define CPORT 10010
#define SIZE 100
int myStringToken(char *argv[],char *string);
int uploadFile(int socket,char * pathname);
int downloadFile(int socket,char * pathname);
int main()
{
//定义变量
int ret = 0;
int socketID = 0;
int addrLength = sizeof(struct sockaddr_in);
struct sockaddr_in serAddr;
char buf[SIZE] = {0};
char commendBuf[100];
char *comBuf[3];
//打开socket(确定协议)
socketID = socket(AF_INET,SOCK_STREAM,0);
if (socketID < 0 )
{
perror("socket error");
return -1;
}
//设置服务器ip&&port
memset(&serAddr,0,addrLength);
serAddr.sin_family =AF_INET;
serAddr.sin_port = htons(SPORT);
serAddr.sin_addr.s_addr = inet_addr(IP);
//发送连接请求
ret = connect(socketID,(struct sockaddr *)&serAddr,addrLength);
if( ret < 0 )
{
perror("connet error");
close(socketID);
return -1;
}
//发送信息
while(1)
{
printf("input\n");
gets(commendBuf);
ret = myStringToken(comBuf,commendBuf);
if(ret != 0)
{
printf("fail to getcomBuf!\n");
}
ret = send(socketID,comBuf[0],strlen(comBuf[0]),0);
if( ret > 0 )
{
printf("send ok\n");
}
if(strcmp(comBuf[0],"look")==0)
{
ret = recv(socketID,buf,sizeof(buf),0);
if( ret == 0 )
{
printf("oklook\n");
break;
}
if( ret >0 )
{
printf("%s",buf);
}
printf("12345678\n");
}
else if(strcmp(comBuf[0],"upload")==0)
{
printf("a=%s\n",comBuf[1]);
ret = send(socketID,comBuf[1],strlen(comBuf[1]),0);
if( ret > 0 )
{
printf("send ok\n");
}
ret = recv(newID,buf,sizeof(buf),0);
if(strcmp(buf,"ok!")==0)
{
ret = uploadFile(socketID,comBuf[1]);
if(ret = 0)
{
printf("uploadFile over!\n");
}
}
}
else if(strcmp(comBuf[0],"download")==0)
{
printf("a=%s\n",comBuf[1]);
ret = send(socketID,comBuf[1],strlen(comBuf[1]),0);
if( ret > 0 )
{
printf("send ok\n");
}
ret = downloadFile(socketID,comBuf[1]);
if(ret == 0)
{
printf("downloadFile over!\n");
}
}
}
close(socketID);
return 0;
}
int myStringToken(char *argv[],char *string)
{
int i=0;
char delim[]=" ";
char *p;
argv[0]=strtok(string,delim);//将用户输入的命令一空格隔开
while(argv[i]!=NULL)
{
argv[++i]=strtok(NULL,delim);//将第二个及其以后的命令分割存入argv中
}
return 0;
}
int uploadFile(int socket,char * pathname)
{
int ret = 0;
int sum = 0;
int fd = 0;
char buf[SIZE] = {0};
fd = open(pathname,O_RDONLY),0666;
if(fd < 0)
{
perror("open error");
return -2;
}
while(1)
{
ssize_t ret1 = read(fd,buf,sizeof(buf));
if(ret1 < 0)
{
perror("read error");
return -1;
}
else if(0<ret1)
{
ret = send(socket,buf,ret1,0);
sum =+ ret1;
}
else
{
printf("read over!\n");
break;
}
}
printf("sum = %d\n",sum);
close(fd);
return 0;
}
int downloadFile(int socket,char * pathname)
{
int ret = 0;
int fd = 0;
char buf[SIZE] = {0};
fd = open(pathname,O_CREAT|O_RDWR,0666);
if(fd < 0)
{
perror("open error");
return -2;
}
while(1)
{
ret = recv(socket,buf,sizeof(buf),0);
if( ret == 0 )
{
break;
}
if( ret >0 )
{
write(fd,buf,ret);
}
}
close(fd);
return 0;
}