server.c

来自「网络通信编程」· C语言 代码 · 共 105 行

C
105
字号
//============================================================================// Name        : server.cpp// Author      : maduohe// Version     :// Copyright   : nercis// Description : Hello World in C, Ansi-style//============================================================================#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <netdb.h>#define MAXSIZE 80#define MYPORT 3490#define BACKLOG 10#define BUFSIZE 100void str_ser(int sockfd);int main(void)  {    int sockfd,con_fd,ret;    struct sockaddr_in my_addr;    struct sockaddr_in their_addr;    int sin_size = sizeof(struct sockaddr_in);    //char *buf;    int pid ;    sockfd = socket(AF_INET,SOCK_STREAM,0);    if(sockfd<0)      {        printf("error in socket.");        exit(0);      }        //创建监听套接口    my_addr.sin_family = AF_INET;    my_addr.sin_port = htons(MYPORT);    my_addr.sin_addr.s_addr = htonl(INADDR_ANY);    bzero(&(my_addr.sin_zero),8);    ret = bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));    if(ret<0)      {        printf("error in binding");      }        //绑定监听套接口    ret = listen(sockfd,BACKLOG);    if(ret<0)      {        printf("error in listening");        exit(1);      }        //监听连接请求    while(1)      {        ///sin_size = sizeof(struct sockaddr_in);        con_fd = accept(sockfd,(struct sockaddr*)&their_addr,(socklen_t*)&sin_size);        if(con_fd<0)          {            printf("error in accept.");            exit(1);          }        //创建新的连接        if((pid = fork()) == 0)          {            //子进程代码            close(sockfd);            str_ser(con_fd);            //接受并处理数据            close(con_fd);            exit(0);          }        else          {            //父进程代码            close(con_fd);          }      }    close(sockfd);    exit(0);  }void str_ser(int sockfd)  {    char recvs[MAXSIZE];    int n=0;    while(1)      {        if((n = recv(sockfd,recvs,MAXSIZE,0)) == 0)          {            return;          }        send(sockfd,recvs,n,0);      }  }

⌨️ 快捷键说明

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