/* fpont 12/99 */ /* pont.net */ /* udpServer.c */ #include #include #include #include #include #include #include /* close() */ #include /* memset() */ #define LOCAL_SERVER_PORT 1500 #define MAX_MSG 100 int main(int argc, char *argv[]) { int sd, rc, n, cliLen; struct sockaddr_in cliAddr, servAddr; char msg[MAX_MSG]; char sendMsg[MAX_MSG]; /* socket creation */ sd=socket(AF_INET, SOCK_DGRAM, 0); if(sd<0) { printf("%s: cannot open socket \n",argv[0]); exit(1); } /* bind local server port */ servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(LOCAL_SERVER_PORT); rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr)); if(rc<0) { printf("%s: cannot bind port number %d \n", argv[0], LOCAL_SERVER_PORT); exit(1); } printf("%s: waiting for data on port UDP %u\n", argv[0],LOCAL_SERVER_PORT); /* server infinite loop */ while(1) { /* receive message */ cliLen = sizeof(cliAddr); n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *) &cliAddr, &cliLen); if(n<0) {printf("%s: cannot receive data \n",argv[0]); exit(1); } printf("%s",msg); /*send message*/ scanf("%s",sendMsg); strcat(sendMsg,"\n"); rc = sendto(sd, sendMsg, strlen(sendMsg), 0,(struct sockaddr *) &cliAddr, sizeof(cliAddr)); if(rc<0) { printf("cannot send data: %s\n",sendMsg); close(sd); exit(1); } }/* end of server infinite loop */ return 0; }