📄 client.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 + -