📄 server.c
字号:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <stdarg.h>
#define fileSize 2048
int count;
int readfile(const char *fileName,char *fileBuf)
{
FILE *pFile;
pFile=fopen(fileName,"r");
if(pFile==NULL)
{
printf("No such file! \n");
return 0;
}
else
{
char ch=fgetc(pFile);
count=0;
while(ch!=EOF)
{
fileBuf[count++]=ch;
ch=fgetc(pFile);
if(count==fileSize)
{
printf("erorr!Size of file is too large\n");
break;
}
}
fileBuf[count]='\0';
}
fclose(pFile);
return 1;
}
int selectprotocol()
{
int p;
while(1)
{
printf("selcet protocol\n");
printf("put in 0(tcp) or 1(udp)\n");
scanf("%d",&p);
if(p==0)
return 0;
else if(p==1)
return 1;
else
{
printf("error! select protocol again!\n");
continue;
}
}
}
void tcpconnection()
{
int fd;
int address_len;
struct sockaddr_in address;
int recvno;
fd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(1234);
address_len = sizeof(address);
bind(fd, (struct sockaddr *)&address, address_len);
listen(fd, 5);
while(1) {
struct sockaddr_in client_address;
int len;
int client_sockfd;
char *data = "Server to Client String!\n";
char filename[200];
char file[fileSize];
printf("waiting...\n");
fflush(stdout);
len = sizeof(client_address);
client_sockfd = accept(fd,(struct sockaddr *)&client_address, &len);
recvno=read(client_sockfd,filename,200);
filename[recvno]='\0';
printf("Requested file:%s\n",filename);
recvno=readfile(filename,file);
if(recvno==0)
{
send(client_sockfd,"No such file,message come frome server!\n",fileSize,0);
printf("no such file!\n");
close(client_sockfd);
}
else
{
send(client_sockfd,file,count,0);
printf("Send file successful \n");
close(client_sockfd);
}
}
}
void udpconnection()
{
int fd;
int address_len;
struct sockaddr_in address;
fd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&address, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(1234);
address_len = sizeof(address);
bind(fd, (struct sockaddr *)&address, address_len);
while(1) {
struct sockaddr_in client_address;
socklen_t len = sizeof(client_address);
int n;
char filename[200];
char file[fileSize];
printf("waiting...\n");
fflush(stdout);
n = recvfrom(fd, filename, 200, 0,(struct sockaddr *)&client_address, &len);
printf("Requested file: %s\n",filename);
filename[n]='\0';
n=readfile(filename,file);
if(n==0)
{
sendto(fd,"no such file(message from server)",200,0,(struct sockaddr *)&client_address,len);
}
else
{
sendto(fd, file, count, 0,(struct sockaddr *)&client_address, len);
printf("send file successful!\n");
}
}
}
int main()
{
int protocol=selectprotocol();
if(protocol==0)
tcpconnection();
else if(protocol==1)
udpconnection();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -