⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileserver.c

📁 linux下的服务器端大文件传输程序
💻 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 + -