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]
浙公网安备 33010602011771号