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

📄 server.c

📁 周立功Magic2410实验箱光盘源码 第5章Linux应用程序编写 5.1 HelloWorld程序实验 5.2 Linux定时器实验 5.3多进程实验 5.4多线程实验 5.5文件和目
💻 C
字号:
/*****************************************Copyright (c)****************************************************                               Guangzhou Zhiyuan Electronic Co.,LTD.**                                     graduate school**                                 http://www.zyinside.com****------------------------------------- File Info ------------------------------------------------------** File name:           server.c** Last modified Date:  2005-12-30** Last Version:        1.0** Descriptions:        server of TCP.**------------------------------------------------------------------------------------------------------** Created by:          Ganda** Created date:        2005-12-27** Version:             1.0** Descriptions:        Preliminary version.****------------------------------------------------------------------------------------------------------** Modified by:		Chenxibing** Modified date:	2005-12-30	** Version:		1.0.1** Descriptions:	modified for MagicARM2410.***********************************************************************************************************/#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/wait.h>#include <sys/socket.h>                                  #define PORT 5000                      // The port which is communicate with server#define BACKLOG 10#define LENGTH 512                     // Buffer length                                                                                 int main (){   int sockfd;                        // Socket file descriptor    int nsockfd;                       // New Socket file descriptor    int num;    int sin_size;                      // to store struct size    char sdbuf[LENGTH];                // Send buffer    struct sockaddr_in addr_local;         struct sockaddr_in addr_remote;        char sendstr[16]= {"123456789 abcde"};                       /* Get the Socket file descriptor */      if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 )      {           printf ("ERROR: Failed to obtain Socket Despcritor.\n");        return (0);    }    else    {        printf ("OK: Obtain Socket Despcritor sucessfully.\n");    }        /* Fill the local socket address struct */    addr_local.sin_family = AF_INET;           // Protocol Family    addr_local.sin_port = htons(PORT);         // Port number    addr_local.sin_addr.s_addr  = INADDR_ANY;  // AutoFill local address    bzero(&(addr_local.sin_zero), 8);          // Flush the rest of struct    /*  Blind a special Port */    if( bind(sockfd, (struct sockaddr*)&addr_local, sizeof(struct sockaddr)) == -1 )    {      	  printf ("ERROR: Failed to bind Port %d.\n",PORT);        return (0);    }    else    {        printf("OK: Bind the Port %d sucessfully.\n",PORT);    }       /*  Listen remote connect/calling */    if(listen(sockfd,BACKLOG) == -1)        {          printf ("ERROR: Failed to listen Port %d.\n", PORT);        return (0);    }    else    {        printf ("OK: Listening the Port %d sucessfully.\n", PORT);    }       while(1)    {          sin_size = sizeof(struct sockaddr_in);                  /*  Wait a connection, and obtain a new socket file despriptor for single connection */        if ((nsockfd = accept(sockfd, (struct sockaddr *)&addr_remote, &sin_size)) == -1)        {              printf ("ERROR: Obtain new Socket Despcritor error.\n");            continue;        }        else        {            printf ("OK: Server has got connect from %s.\n", inet_ntoa(addr_remote.sin_addr));         }                /* Child process */        if(!fork())                            {              printf("You can enter string, and press 'exit' to end the connect.\n");            while(strcmp(sdbuf,"exit") != 0)            {                 scanf("%s", sdbuf);                 if((num = send(nsockfd, sdbuf, strlen(sdbuf), 0)) == -1)                {                    printf("ERROR: Failed to sent string.\n");                    close(nsockfd);                    exit(1);                }                printf("OK: Sent %d bytes sucessful, please enter again.\n", num);              }         }               close(nsockfd);           while(waitpid(-1, NULL, WNOHANG) > 0);         }    }

⌨️ 快捷键说明

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