📄 sever.cpp
字号:
#include <SYS socket.h>
#include <STRING.H>
#include <NETINET in.h>
#include <STDIO.H>
#include <STDLIB.H>
#include <FCNTL.H>
#include <SYS stat.h>
#include <UNISTD.H>
#include <ERRNO.H>
#include <SYS select.h>
#include <SYS time.h>
#include <SYS types.h>
#define SERV_PORT 8888
#define MAX_SIZE 1024*50
void recvUDP(char name[20],int sockfd)
{
int ret,fd;
mode_t fdmode=(S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
char mesg[MAX_SIZE];
fd_set rdset;
struct timeval tv;
int rlen,wlen;
int i;
fd=open(name,O_RDWR|O_CREAT|O_APPEND,fdmode);
if(fd==-1)
{
printf("open file %s erro:%s\n",name,strerror(errno));
exit(-1);
}
for(i=0;;i++)
{
tv.tv_sec=1;
tv.tv_usec=0;
FD_ZERO(&rdset);
FD_SET(sockfd,&rdset);
ret=select(sockfd+1,&rdset,NULL,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;
}
if(FD_ISSET(sockfd,&rdset))
{
memset(mesg,0,MAX_SIZE);
rlen=read(sockfd,mesg,MAX_SIZE);
if(rlen<=0)
{
printf("read error %s\n",strerror(errno));
exit(-1);
}
if(!strcmp(mesg,"end"))
{
printf("recv end.\n");
break;
}
wlen=write(fd,mesg,rlen);
if(wlen!=rlen);
{
printf("write error %s\n",strerror(errno));
exit(-1);
}
printf("The %d times write\n",i);
}
close(fd);
}
}
int main(int argc,char *argv[])
{
int sockfd;
int r;
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);//寤虹珛濂楁帴瀛?
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
//缁戝畾
if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))==-1)
{
perror("bind error");
exit(-1);
}
r=fcntl(sockfd,F_GETFL,0);
fcntl(sockfd,F_SETFL,r&~O_NONBLOCK);
recvUDP(argv[1],sockfd);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -