/* This program creates a tcp server process in the internet domain, port is passed in as an arg */ /* to compile, add wsock32.lib to the list of libraries to link with in the project settings menu*/ #include #include #include #define BUFSIZE 1024 char *msg = "I got your message"; void error(char *msg) { printf("ERROR, %s, errno is %d\n",msg, WSAGetLastError()); exit(0); } int main(int argc, char *argv[]) { SOCKET sock, newsock; int len, fromlen; DWORD n, retval; unsigned short port; struct sockaddr_in server; struct sockaddr_in from; char buffer[BUFSIZE]; WORD version; WSADATA stWSAData; if (argc < 2) { fprintf(stderr,"usage %s portnumber\n",argv[0]); exit(0); } version = MAKEWORD(2,2); retval =WSAStartup(version,&stWSAData); if (retval != 0) error("WSAStartup"); port = (unsigned short) atoi(argv[1]); sock=socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) error("Opening socket"); server.sin_family=AF_INET; server.sin_addr.s_addr=INADDR_ANY; server.sin_port=htons(port); len=sizeof(server); if (bind(sock, (struct sockaddr *)&server, len) != 0) error("binding socket"); fromlen=sizeof(from); listen(sock,5); while (1) { newsock=accept(sock, (struct sockaddr *)&from, &fromlen); printf("A connection has been accepted\n"); n = recv(newsock,buffer,BUFSIZE,0); if (n < 1) { error("Reading from socket"); } else { buffer[n]='\0'; printf("The message from %s is %s\n", inet_ntoa(from.sin_addr), buffer); } n = send(newsock, msg, strlen(msg),0); if (n != strlen(msg)) error("Writing"); closesocket(newsock); } return 0; /* we never get here */ }