diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..cd005e38 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +all: server-udp + +#if you are on a sunOS (System V) machine, you'll need to uncomment +#the next line. + +#LIBS=-lsocket + +server-udp: server-udp.c + $(CC) -o server-udp server-udp.c $(LIBS) + +.PHONY: clean + +clean: + -rm -f *.o server-udp diff --git a/README.md b/README.md new file mode 100644 index 00000000..e69de29b diff --git a/server-udp b/server-udp new file mode 100755 index 00000000..f0142d49 Binary files /dev/null and b/server-udp differ diff --git a/server-udp.c b/server-udp.c new file mode 100644 index 00000000..74aeac56 --- /dev/null +++ b/server-udp.c @@ -0,0 +1,70 @@ +#include /* standard in/out procedures */ +#include /* defines system calls */ +#include /* necessary for memset */ +#include +#include /* used for all socket calls */ +#include /* used for sockaddr_in */ +#include + + +#define SERV_PORT 11111 /* define our server port number */ +#define MSGLEN 80 /* limit incoming message size */ + +int +main(int argc, char** argv) +{ +/* CREATE THE SOCKET */ + + struct sockaddr_in servaddr; /* our server's address */ + struct sockaddr_in cliaddr; /* the client's address */ + int sockfd; /* Initialize our socket */ + socklen_t addrlen = sizeof(cliaddr);/* length of address' */ + int recvlen; /* number of bytes recieved */ + int msgnum = 0; /* the messages we reveive in order */ + char buf[MSGLEN]; /* the incoming message */ + +/* create a UDP/IP socket */ + + if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) + { + perror("cannot create socket"); + return 0; + } + +/* printf("created socket descriptor = %d\n", sockfd); */ + +/* INADDR_ANY = IP address and socket = 11111, modify SERV_PORT to change */ + memset((char *)&servaddr, 0, sizeof(servaddr)); + + + servaddr.sin_family = AF_INET; + /* host-to-network-long conversion (htonl) */ + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); + /* host-to-network-short conversion (htons) */ + servaddr.sin_port = htons(SERV_PORT); + + + if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { + perror("bind failed"); + return 0; + } + +/* loop, listen for client, print received, reply to client */ + for(;;) { + printf("waiting for client message on port %d\n", SERV_PORT); + recvlen = recvfrom(sockfd, buf, MSGLEN, 0, (struct sockaddr *)&cliaddr, &addrlen); + printf("heard %d bytes\n", recvlen); + if (recvlen > 0) { + buf[recvlen] = 0; + printf("I heard this: \"%s\"\n", buf); + } + else + printf("lost the connection to client\n"); + sprintf(buf, "Message #%d received\n", msgnum++); + printf("reply sent \"%s\"\n", buf); + if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&cliaddr, addrlen) < 0) + perror("sendto"); + /* continues to loop, use "Ctrl+C" to terminate listening */ + + } +}