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

📄 client.cpp

📁 关于文件传输一个学习例子
💻 CPP
字号:
#include <SYS types.h>   
#include <SYS socket.h>   
#include <STRING.H>   
#include <NETINET in.h>   
#include <STDIO.H>   
#include <STDLIB.H>   
#include <ARPA inet.h>   
#include <FCNTL.H>   
#include <SYS stat.h>   
#include <ERRNO.H>   
#include <SYS sysinfo.h>   
#include <SYS select.h>   
#include <SYS time.h>   
#include <UNISTD.H>   
  
#define MAX_SIZE 1024*50   
#define SERV_PORT 8888   
  
void connectUDP(char name[20],int sockfd,struct sockaddr *pservaddr,socklen_t servlen)  
{  
    char buf[MAX_SIZE];  
    fd_set wrset;  
    struct timeval tv;  
    int rlen,wlen;  
    int fd;  
    int ret;  
    int i;  
      
  
    if (connect(sockfd,(struct sockaddr *)pservaddr,servlen)!=0)  
    {  
        perror("connet error");  
        exit(1);  
    }  
    else   
        printf("connect server OK!\n");  
  
    fd=open(name,O_RDONLY);  
    if(fd==-1)  
    {  
        printf("fopen error %s\n",strerror(errno));  
        exit(-1);  
    }  
  
    i=0;  
  
    while(1)  
    {  
        tv.tv_sec=1;  
        tv.tv_usec=0;  
  
        FD_ZERO(&wrset);  
        FD_SET(sockfd,&wrset);  
  
        ret=select(sockfd+1,NULL,&wrset,NULL,&tv);  
        if(ret==-1)  
        {  
            printf("select error %s\n",strerror(errno));  
            exit(-1);  
        }  
        else if(ret==0)  
        {  
            printf("select timeout,continue circle\n");  
            continue;  
        }  
  
        memset(buf,0,MAX_SIZE);  
        if(FD_ISSET(sockfd,&wrset))  
        {  
            rlen=read(fd,buf,MAX_SIZE);  
                if(rlen<0)  
                {  
                    printf("fread data error %s\n",strerror(errno));  
                    exit(-1);  
                }  
                else if(rlen==0)  
                {  
                    wlen=write(sockfd,"end",3);  
                    if(wlen!=3)  
                    {  
                        printf("write end error:%s\n",strerror(errno));  
                        exit(-1);  
                    }  
                    printf("all complete\n");  
  
                    close(fd);  
                    close(sockfd);  
                    exit (0);  
                }  
            wlen=write(sockfd,buf,rlen);  
            if(wlen!=rlen)  
            {  
                printf("write data to sockfd error:%s\n",strerror(errno));  
                exit(-1);  
            }  
              
            i++;  
  
            sleep(5);  
            printf("The %d temes read\n",i);  
        }  
    }  
}  
  
  
  
  
int main(int argc,char *argv[])  
{  
    char *fh;  
    struct sysinfo s_info;  
    float time1,time2;  
    int error1,error2;  
    int sockfd;  
    struct stat fsize;  
    struct sockaddr_in servaddr;  
    error1=sysinfo(&s_info);  
    time1=s_info.uptime;  
    int r;  
  
    if(argc!=3)  
    {  
        printf("useage:udpclient<IPADDRESS>;\n");  
        exit(1);  
    }  
      
    bzero(&servaddr,sizeof(servaddr));  
    servaddr.sin_family=AF_INET;  
    servaddr.sin_port=htons(SERV_PORT);  
  
    if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)  
    {  
        printf("[%s]is not a valid IPaddress\n",argv[1]);  
        exit(1);  
    }  
    fh=argv[2];  
  
    sockfd=socket(AF_INET,SOCK_DGRAM,0);  
  
    r=fcntl(sockfd,F_GETFL,0);  
    fcntl(sockfd,F_SETFL,r&~O_NONBLOCK);  
  
    connectUDP(argv[2],sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));  
  
    fprintf(stderr,"ServerIP:\t%s\n",argv[1]);  
    if(stat(argv[2],&fsize)==-1)  
        perror("failed to get file statusi\n");  
    else  
        fprintf(stderr,"file name:\t%s\nfile size:\t%ldK\n",argv[2],fsize.st_size/1024);  
    error2=sysinfo(&s_info);  
    time2=s_info.uptime;  
    printf("tranfice file time=%fs\n",(time2-time1));  
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -