⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.c

📁 Linux sockets client and server example programs.
💻 C
字号:
/* server.c - code for example server program that uses TCP */#ifndef unix#define WIN32#include <windows.h>#include <winsock.h> #else#define closesocket close#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#endif#include <stdio.h>#include <string.h>#define PROTOPORT       5193            /* default protocol port number */#define QLEN            6               /* size of request queue        */int     visits      =   0;              /* counts client connections    *//*------------------------------------------------------------------------ * Program:   server * * Purpose:   allocate a socket and then repeatedly execute the following: *              (1) wait for the next connection from a client *              (2) send a short message to the client *              (3) close the connection *              (4) go back to step (1) * * Syntax:    server [ port ] * *               port  - protocol port number to use * * Note:      The port argument is optional.  If no port is specified, *            the server uses the default given by PROTOPORT. * *------------------------------------------------------------------------ */main(argc, argv)int     argc;char    *argv[];{        struct  hostent  *ptrh;  /* pointer to a host table entry       */        struct  protoent *ptrp;  /* pointer to a protocol table entry   */        struct  sockaddr_in sad; /* structure to hold server's address  */        struct  sockaddr_in cad; /* structure to hold client's address  */        int     sd, sd2;         /* socket descriptors                  */        int     port;            /* protocol port number                */        int     alen;            /* length of address                   */        char    buf[1000];       /* buffer for string the server sends  */#ifdef WIN32        WSADATA wsaData;        WSAStartup(0x0101, &wsaData);#endif        memset((char *)&sad,0,sizeof(sad)); /* clear sockaddr structure */        sad.sin_family = AF_INET;         /* set family to Internet     */        sad.sin_addr.s_addr = INADDR_ANY; /* set the local IP address   */        /* Check command-line argument for protocol port and extract    */        /* port number if one is specified.  Otherwise, use the default */        /* port value given by constant PROTOPORT                       */        if (argc > 1) {                 /* if argument specified        */                port = atoi(argv[1]);   /* convert argument to binary   */        } else {                port = PROTOPORT;       /* use default port number      */        }        if (port > 0)                   /* test for illegal value       */                sad.sin_port = htons((u_short)port);        else {                          /* print error message and exit */                fprintf(stderr,"bad port number %s\n",argv[1]);                exit(1);        }        /* Map TCP transport protocol name to protocol number */        if ( ((int)(ptrp = getprotobyname("tcp"))) == 0) {                fprintf(stderr, "cannot map \"tcp\" to protocol number");                exit(1);        }        /* Create a socket */        sd = socket(PF_INET, SOCK_STREAM, ptrp->p_proto);        if (sd < 0) {                fprintf(stderr, "socket creation failed\n");                exit(1);        }        /* Bind a local address to the socket */        if (bind(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {                fprintf(stderr,"bind failed\n");                exit(1);        }        /* Specify size of request queue */        if (listen(sd, QLEN) < 0) {                fprintf(stderr,"listen failed\n");                exit(1);        }        /* Main server loop - accept and handle requests */        while (1) {                alen = sizeof(cad);                if ( (sd2=accept(sd, (struct sockaddr *)&cad, &alen)) < 0) {                        fprintf(stderr, "accept failed\n");                        exit(1);                }                visits++;                sprintf(buf,"This server has been contacted %d time%s\n",                        visits,visits==1?".":"s.");                send(sd2,buf,strlen(buf),0);                closesocket(sd2);        }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -