70,021
社区成员




int main(){
int sockfd;
int len;
int z;
char buf[256];
struct sockaddr_in adr_inet;
struct sockaddr_in adr_clnt;
printf("waiting for client...\n");
adr_inet.sin_family=AF_INET;
adr_inet.sin_port=htons(port);
adr_inet.sin_addr.s_addr=htonl(INADDR_ANY);
bzero(&(adr_inet.sin_zero),8);
len=sizeof(adr_clnt);
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1){
perror("socket error_1");
exit(1);
}
z=bind(sockfd,(struct sockaddr *)&adr_inet,sizeof(adr_inet));
if(z==-1){
perror("bind error_1");
exit(1);
}
while(1){
z=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_clnt,&len);
if(z<0){
perror("recvfrom error_1");
exit(1);
}
buf[z]=0;
printf("接收:%s",buf);
if(strncmp(buf,"stop",4)==0){
printf("结束....\n");
break;
}
}
close(sockfd);
exit(0);
}
这个就是单独一个循环里面直接recvfrom,一次只能接收一个客户端的报文吗??[/quote]
每一次调用 recvfrom 返回的都可能是不同的客户端的包
这个服务器是可以服务任意数量的客户端的,只要服务器性能够。
int main(){
int sockfd;
int len;
int z;
char buf[256];
struct sockaddr_in adr_inet;
struct sockaddr_in adr_clnt;
printf("waiting for client...\n");
adr_inet.sin_family=AF_INET;
adr_inet.sin_port=htons(port);
adr_inet.sin_addr.s_addr=htonl(INADDR_ANY);
bzero(&(adr_inet.sin_zero),8);
len=sizeof(adr_clnt);
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1){
perror("socket error_1");
exit(1);
}
z=bind(sockfd,(struct sockaddr *)&adr_inet,sizeof(adr_inet));
if(z==-1){
perror("bind error_1");
exit(1);
}
while(1){
z=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_clnt,&len);
if(z<0){
perror("recvfrom error_1");
exit(1);
}
buf[z]=0;
printf("接收:%s",buf);
if(strncmp(buf,"stop",4)==0){
printf("结束....\n");
break;
}
}
close(sockfd);
exit(0);
}
这个就是单独一个循环里面直接recvfrom,一次只能接收一个客户端的报文吗??