📄 server2.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>
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.204");
// 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
// Read Accounts
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, 10) == -1){
printf("Error: write()\n");
exit(1);
}
}
strcpy(msg,"none");
// Read Passwords
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, 10) == -1){
printf("Error: write()\n");
exit(1);
}
}
DIR *dir = opendir("/p3/test");
struct dirent *ptr;
char folder[100];
char file_dir[20][10];
int n=0;
// Read folder
while((ptr=(readdir(dir)))!=NULL)
{
strcpy(file_dir[n],ptr->d_name); n++;
strcat(folder,ptr->d_name);
strcat(folder,"\n");
printf("d_name: %s\n", ptr->d_name);
}
if(write(connfd, folder, 100) == -1){
printf("Error: write()\n");
exit(1);
}
int i;
char filepath[100]="";
//while(1)
//{
// Read filename from client
read(connfd, filename, 100);
// Search filename
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");
}
// Produce Filepath
strcat(filepath,"test/");
strcat(filepath,filename);
// Write file to client
FILE *fp = fopen(filepath, "r");
long size = ftell(fp);
char *buffer = (char*)malloc(sizeof(char)*size);
size_t result;
for(i=0 ; i<size ; i++)
{
fread(buffer,1,size,fp);
if(write(connfd, buffer, 10) == -1){
printf("Error: write()\n");
exit(1);
}
}
//while(fgets(tst,10,fp)!=NULL)
//{
// if(write(connfd, tst, 10) == -1){
// printf("Error: write()\n");
// exit(1);
// }
}
// file end
if(write(connfd, "END", 10) == -1){
printf("Error: write()\n");
exit(1);
}
if(write(connfd, "file transfer complete\n", 10) == -1){
printf("Error: write()\n");
exit(1);
}
//}
closedir(dir);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -