microsoftxiao

记忆 流逝

导航

ServerLinux下基础

[code]
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 2008
#define MAX_MSG 256
#define MAX_UDP_CLIENT 5

int UDPServer();

int main(int argc,char** argv)

   UDPServer();
   return 0;
}


int UDPServer()
{
  int rc,cliLen,n;
  char msg[MAX_MSG];
 
  int sockfd = socket(AF_INET,SOCK_DGRAM,0);
  if(sockfd<0){
    printf("cannot bind socket\n");
    exit(1);
  } 
  struct sockaddr_in cliAddr,servAddr;
  struct sockaddr_in clients[MAX_UDP_CLIENT]; //gather

  servAddr.sin_family = AF_INET;
  servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  servAddr.sin_port = htons(PORT);
 
  rc = bind(sockfd,(struct sockaddr*)&servAddr,sizeof(servAddr));
  if(rc<0){
    printf("cannot bind number\n");
    exit(1);
  }
 
  int iRemoteCNum = 0; 


  while(1){
     memset(msg,0x0,MAX_MSG);
    
     cliLen = sizeof(clients[iRemoteCNum]);
     if(iRemoteCNum>=MAX_UDP_CLIENT)
        iRemoteCNum = 0;  
    n = recvfrom(sockfd,msg,MAX_MSG,0,(struct sockaddr*)&clients[iRemoteCNum],&cliLen);
    
     int i;
     for(i=0;i<=iRemoteCNum;i++){
     
       sendto(sockfd,msg,MAX_MSG,0,(struct sockaddr*)&clients[i],sizeof(clients[i]));
     }
     if(n<0){
        printf("cannot receive data\n");
        continue;
     }

     printf(" from %s: UDP %u: %s\n",
          inet_ntoa(cliAddr.sin_addr),ntohs(clients[iRemoteCNum].sin_port),msg);
     iRemoteCNum++;
  }
 
  return 0;
}
[/code]

posted on 2006-09-29 23:16  龙巢NET刀  阅读(187)  评论(0)    收藏  举报