📄 unixserver.c
字号:
/* unixServer - reads client requests and sends a reply. *//* Copyright 1984-1994 Wind River Systems, Inc. *//*modification history--------------------01c,06apr98,dlk removed free (pClientInet).01b,05dec94,bss cleaned up. WRS coding conventions enforced. 01a,???????,??? written.*//*DESCRIPTION*//* includes */#include <arpa/inet.h>#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>/* defines */#define MAX_MSG_LEN 80#define FOREVER for (;;) /* for WRS coding conventions */#define LOCAL static/* typedefs */typedef int SOCK_FD;/* forward declarations */LOCAL void error ();/******************************************************************************* * * main - entry point to unixServer * * This routine sets up a UDP socket and then sits in an infinite * loop reading client messages, printing them to the console, and * sending a reply. */main (argc, argv) int argc; char ** argv; { short port; int clientAddrLength; SOCK_FD sockFd; struct sockaddr_in clientAddr; struct sockaddr_in srvAddr; char buf [MAX_MSG_LEN]; char * reply = "Here is your reply\n"; u_short clientPort; char * pClientInet; clientAddrLength = sizeof (clientAddr); /* Get the server port number */ if (argc != 2) { fprintf (stderr, "Usage: %s portNumber\n", argv[0]); exit (1); } port = (short) atoi (argv [1]); /* Create a socket */ if ((sockFd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) error ("Socket failed"); /* * Bind to a well known address. INADDR_ANY says any network * interface will do. hton?() routines put things in network * byte order */ bzero ((char *) &srvAddr, sizeof (srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_port = htons(port); srvAddr.sin_addr.s_addr = INADDR_ANY; if (bind (sockFd, &srvAddr, sizeof(srvAddr)) < 0) { close (sockFd); error ("Bind failed"); } FOREVER { if (recvfrom (sockFd, buf, MAX_MSG_LEN, 0, &clientAddr, &clientAddrLength) < 0) { close (sockFd); error ("recvfrom failed"); } clientPort = ntohs (clientAddr.sin_port); pClientInet = inet_ntoa (clientAddr.sin_addr); printf ("Message received from client (port = %d, inet = %s):\n", clientPort, pClientInet); printf ("%s\n", buf); if (sendto (sockFd, reply, strlen(reply) + 1, 0, &clientAddr, clientAddrLength) < 0) { close (sockFd); error ("sendto failed"); } } }/******************************************************************************* * * error - aborts a process on an error * * This funcion displays the reason a process crashed * and terminates that process. */LOCAL void error (pStr) char * pStr; { perror (pStr); exit (1); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -