📄 fileserver.c
字号:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BACKLOG 10
#define MAXNAME 10
#define MAXLEN 100
int main (int argc,char* arvg[])
{
int connfd,sockfd;
struct sockaddr_in servaddr;
struct sockaddr_in tempaddr;
struct sockaddr_in cliaddr;
int clilen;
char ip_str[INET_ADDRSTRLEN];
int templen;
char name[MAXNAME]={0}, buffer[MAXLEN];
FILE *fp;
int n;
/*creat a IPv4 TCP socket*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
// exit(1);
}
/*initialize the sockaddr_in*/
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
/*We let the kernel choose our port number*/
servaddr.sin_port=0;
/*ok,now bind*/
if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
perror("bind");
// exit(1);
}
/*listen on the port*/
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen");
// exit(1);
}
/*how can we get the binded socket information*/
templen=sizeof(struct sockaddr);
if(getsockname(sockfd,(struct sockaddr*)&tempaddr,&templen)==-1)
{
perror("getsockname");
// exit(1);
}
printf("Server is listening on port %d\n",ntohs(tempaddr.sin_port));
for(;;)
{
clilen=sizeof(cliaddr);
connfd=accept(sockfd,(struct sockaddr*)&cliaddr,&clilen);
if(connfd==-1)
{
perror("accept");
continue;
}
printf("Server:client %s connects \n",inet_ntoa(cliaddr.sin_addr));
read(connfd,name,MAXNAME);
printf("Client requests file:%s", name);
if((fp=fopen(name,"r"))==NULL)
{
fprintf(stdout,"Can't open \"%s\" file.\n",name);
// exit(1);
}
while(n=fread(buffer,sizeof(char),MAXLEN,fp))
write(connfd,buffer,n);
printf("\nServer sent file over!\n");
fclose(fp);
close(connfd);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -