/*===========================================================================
Name : Server.c
Author : Haier
Version : 1.0
Copyright : Your copyright notice
Description : Server in C, Ansi-style,Compile by Gcc
============================================================================*/
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/select.h>
#include <time.h>
#define LISTENPORT (6000)
#define BUFSIZE (1024)
int main(int argc,char *argv[])
{
int ServerSocket;
struct sockaddr_in ServerAddr;
fd_set Readfds;
int SelectSocket;
struct timeval TimeOut={0,0};
int AddrLen;
int MessageLen;
struct sockaddr_in ClientAddr;
char Buf[BUFSIZE];
ServerSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(ServerSocket<0)
{
printf("Socket Failed !\n");
exit(0);
}
memset(&ServerAddr,0,sizeof(ServerAddr));
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);
ServerAddr.sin_port=htons((unsigned short)LISTENPORT);
if(bind(ServerSocket,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr))<0)
{
printf("Bind Failed !\n");
exit(0);
}
while(1)
{
do
{
FD_ZERO(&Readfds);
FD_SET(ServerSocket,&Readfds);
SelectSocket=select(ServerSocket+1,&Readfds,NULL,NULL,&TimeOut);
if(SelectSocket>0)
{
AddrLen=sizeof(ClientAddr);
MessageLen=recvfrom(ServerSocket,Buf,BUFSIZE,0,(struct sockaddr*)&ClientAddr,&AddrLen);
if(MessageLen>0)
{
Buf[MessageLen]='\0';
printf("Recvice form %s : %s\n",inet_ntoa(ClientAddr.sin_addr),Buf);
}
}
}while(SelectSocket>0);
if(strcmp(Buf,"shutdown")==0)
{
break;
}
}
close(ServerSocket);
return 0;
}