From 66e96797c3b442c6b5091eba73719e0bc999b6ef Mon Sep 17 00:00:00 2001 From: William Bracho Blok Date: Wed, 14 Oct 2015 16:54:46 -0500 Subject: [PATCH] Create server.C --- server.C | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 server.C diff --git a/server.C b/server.C new file mode 100644 index 0000000..0c61a0e --- /dev/null +++ b/server.C @@ -0,0 +1,83 @@ +/* A simple server in the internet domain using TCP + The port number is passed as an argument */ +#include +#include +#include +#include +#include +#include +#include + +void error(const char *msg) +{ + perror(msg); + exit(1); +} + +int main(int argc, char *argv[]) +{ + int sockfd, newsockfd, portno; + socklen_t clilen; + char buffer[256]; + + + struct sockaddr_in serv_addr, cli_addr; + + int n; + + + if (argc < 2) { + fprintf(stderr,"ERROR, no port provided\n"); + exit(1); + } + + sockfd = socket(AF_INET, SOCK_STREAM, 0); + + if (sockfd < 0) + error("ERROR opening socket"); + + bzero((char *) &serv_addr, sizeof(serv_addr)); + + portno = atoi(argv[1]); + + serv_addr.sin_family = AF_INET; + + serv_addr.sin_addr.s_addr = INADDR_ANY; + + serv_addr.sin_port = htons(portno); + + if (bind(sockfd, (struct sockaddr *) &serv_addr, + sizeof(serv_addr)) < 0) + error("ERROR on binding"); + + listen(sockfd,5); + + clilen = sizeof(cli_addr); + + newsockfd = accept(sockfd, + (struct sockaddr *) &cli_addr, + &clilen); + + if (newsockfd < 0) + error("ERROR on accept"); + + bzero(buffer,256); + + n = read(newsockfd,buffer,255); + + + if (n < 0) error("ERROR reading from socket"); + + + printf("Here is the message: %s\n",buffer); + + n = write(newsockfd,"I got your message",18); + + if (n < 0) error("ERROR writing to socket"); + + close(newsockfd); + + close(sockfd); + + return 0; +}