/*************************************************************************
> File Name: tcp_client.c
> Author:星夜
> Mail:none
> Created Time: 2018年01月18日 星期四 14时58分19秒
************************************************************************/
#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;
}