TCP之server.c

#include "../Common/common.h"
 
int main(int argc, char *argv[]) 

    //Input the file name 
    char filename[FILE_NAME_MAX_SIZE]; 
    bzero(filename,FILE_NAME_MAX_SIZE); 
    printf("Please input the file name you wana to send:"); 
    scanf("%s",&filename); 
    getchar(); 
 
    //Create socket 
    int sockfd,connfd; 
    struct sockaddr_in svraddr,clientaddr; 
    bzero(&svraddr,sizeof(svraddr)); 
     
    svraddr.sin_family=AF_INET; 
    svraddr.sin_addr.s_addr=htonl(INADDR_ANY); 
    svraddr.sin_port=htons(PORT); 
 
    sockfd=socket(AF_INET,SOCK_STREAM,0); 
    if(sockfd<0) 
    { 
        perror("socket"); 
        exit(1); 
    } 
 
    //bind   
    if(bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr))<0) 
    { 
        perror("bind"); 
        exit(1); 
    } 
 
    //listen 
    if(listen(sockfd,LISTENQ)<0) 
    { 
        perror("listen"); 
        exit(1); 
    } 
 
    while(1) 
    { 
        socklen_t length=sizeof(clientaddr); 
 
        //accept 
        connfd=accept(sockfd,(struct sockaddr*)&clientaddr,&length); 
        if(connfd<0) 
        { 
            perror("connect"); 
            exit(1); 
        } 
     
        //send file imformation 
        char buff[BUFFSIZE]; 
        int count; 
        bzero(buff,BUFFSIZE); 
        strncpy(buff,filename,strlen(filename)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(filename)); 
        count=send(connfd,buff,BUFFSIZE,0); 
        if(count<0) 
        { 
            perror("Send file information"); 
            exit(1); 
        } 
         
        //read file  
        FILE *fd=fopen(filename,"rb"); 
        if(fd==NULL) 
        { 
            printf("File :%s not found!\n",filename); 
        } 
        else  
        { 
            bzero(buff,BUFFSIZE); 
            int file_block_length=0; 
            while((file_block_length=fread(buff,sizeof(char),BUFFSIZE,fd))>0) 
            { 
                printf("file_block_length:%d\n",file_block_length); 
                if(send(connfd,buff,file_block_length,0)<0) 
                { 
                    perror("Send"); 
                    exit(1); 
                } 
                bzero(buff,BUFFSIZE);    
            } 
            fclose(fd); 
            printf("Transfer file finished !\n"); 
        } 
        close(connfd); 
    } 
    close(sockfd); 
    return 0; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值