📄 server.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include<sys/types.h>
#include<dirent.h>
char path[100] = "folder_s";
char file_dir[20][10];
char folder[100];
void listFolder()
{
int n = 0;
DIR *dir = opendir(path);
struct dirent *ptr;
strcpy(folder,"");
while((ptr=(readdir(dir)))!=NULL)
{
printf("d_name: %s\n", ptr->d_name);
strcpy(file_dir[n],ptr->d_name); n++;
strcat(folder,ptr->d_name);
strcat(folder,"\n");
}
closedir(dir);
}
int main(){
struct sockaddr_in addr_svr;
struct sockaddr_in addr_cli;
int sockfd;
int connfd;
int sLen = sizeof(addr_cli);
char id[100];
char pwd[100];
char msg[100];
char tst[50];
char filename[100];
// Set Server Address
memset(&addr_svr, 0, sizeof(addr_svr));
addr_svr.sin_family = AF_INET;
addr_svr.sin_port = htons(80);
addr_svr.sin_addr.s_addr = inet_addr("192.168.0.155");
// Create Socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// Bind Socket
if(bind(sockfd, (struct sockaddr *)&addr_svr, sizeof(addr_svr)) == -1){
printf("Error: bind()\n");
exit(1);
}
// Make Listening Socket
if(listen(sockfd, 10) == -1){
printf("Error: listen()\n");
exit(1);
}
for(;;){ // Get Connected Socket
connfd = accept(sockfd, (struct sockaddr *)&addr_cli, &sLen);
if(connfd == -1){
printf("Error: accept()\n");
exit(1);
}
// Read Data From Client
while(strcmp(msg,"ok"))
{
if(read(connfd, id, 10) == -1){
printf("Error: read()\n");
exit(1);
}
//printf("%s\n", id);
if( strcmp(id,"final")==0) strcpy(msg,"ok");
else strcpy(msg,"false");
if(write(connfd, msg, strlen(msg)+1) == -1){
printf("Error: write()\n");
exit(1);
}
}
strcpy(msg,"none");
while(strcmp(msg,"ok"))
{
if(read(connfd, pwd, 10) == -1){
printf("Error: read()\n");
exit(1);
}
if(strcmp(pwd,"0916")==0) strcpy(msg,"ok");
else strcpy(msg,"false");
if(write(connfd, msg, strlen(msg)+1) == -1){
printf("Error: write()\n");
exit(1);
}
}
printf("Here are the files:\n");
//load file from default folder of server
//DIR *dir = opendir("folder_s/");
//DIR *dir = opendir(path);
//struct dirent *ptr;
//char folder[100];
//char file_dir[20][10];
char dirs[20][10];
int n=0;
int n2=0;
int i=0;
/*
while((ptr=(readdir(dir)))!=NULL)
{
printf("d_name: %s\n", ptr->d_name);
//printf("d_name: %c\n", ptr->d_type);
//if(opendir(ptr->d_name)==NULL)
strcpy(file_dir[n],ptr->d_name); n++;
//else
//{strcpy(dirs[n2],ptr->d_name); n2++;}
strcat(folder,ptr->d_name);
strcat(folder,"\n");
//printf("d_name: %s\n", ptr->d_name);
}
*/
listFolder();
if(write(connfd, folder, 100) == -1){ //write detail info of folder....ls
printf("Error: write()\n");
exit(1);
}
while(1)
{
char filepath[100]="folder_s/";
if(read(connfd, filename, 100) == -1){
printf("Error: read()\n");
exit(1);
}
if(strcmp(filename,"exit")==0)
{
if(write(connfd, "Thank you for use.", 100) == -1){
printf("Error: write()\n");
exit(1);
}
break;
}
//read(connfd, filename, 100);
printf("%s\n",filename);
//system("pause");
for(i=0;i<n;i++)
{
printf("%s\n",file_dir[i]);
if(strcmp(filename,file_dir[i])==0)
{
printf("file exist\n");
break;
}
else
printf("file not exist\n");
}
strcat(path,"/");
strcat(path,filename);
printf("%s\n",path);
if (opendir(path)==NULL)
{
strcat(filepath,filename);
printf("%s\n",filepath);
FILE *fp = fopen(filepath, "r");
while(fgets(tst,10,fp)!=NULL)
{
if(write(connfd, tst, strlen(tst)+1) == -1){
printf("Error: write()\n");
exit(1);
}
printf("%s\n",tst);
}
if(write(connfd, "END", 10) == -1){
printf("Error: write()\n");
exit(1);
}
fclose(fp);
printf("file transfer complete\n");
strcpy(filepath,"");
}
else
{
//strcat(path,"/");
//strcat(path,filename);
listFolder();
}
}
//closedir(dir);
}
//fputs(content, fin);
//if(write(connfd,"jyhfjfjgjyfjyfjyfjyfhjkugjuyfjyf", 100) == -1){
//printf("Error: write()\n");
//exit(1);
//}
/*
if(write(connfd, QueryBuf1, strlen(QueryBuf1)+1) == -1){
printf("Error: write()\n");
exit(1);
}
if(read(connfd, AnteBuf, 20) == -1){
printf("Error: read()\n");
exit(1);
}
//Ante = atoi(AnteBuf);
// Write Data Back to Client
if(write(connfd, QueryBuf2, strlen(QueryBuf2)+1) == -1){
printf( "Error: write()\n");
exit(1);
}
//Choice = atoi(ChoiceBuf);
//sprintf(Result, "The winner is NO.%d\nYou lose the game!\n", winnerNO);
}
*/
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -