您的位置:首页 > 理论基础 > 计算机网络

Linux TCP协议使用进程实现并发服务器

2016-11-07 21:34 417 查看
直接放代码:

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <string.h>

#include <arpa/inet.h>

#define PORTNUM 3333

int main()

{

    int sock_fd;

    int sock_fd_new;

    struct sockaddr_in my_addr;

    int addrlen = sizeof(struct sockaddr);

    struct sockaddr_in addr_client;

    char buf[1024];

    //1.socket

    sock_fd = socket(AF_INET,SOCK_STREAM,0);

    if(sock_fd < 0)

    {

        printf("socket error\n");
exit(1);

    }

    //2.bind

    bzero(&my_addr,sizeof(struct sockaddr_in));

    my_addr.sin_family = AF_INET;

    my_addr.sin_port = htons(PORTNUM);

    //my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    my_addr.sin_addr.s_addr = inet_addr("192.168.1.11");

    if(bind(sock_fd,(struct sockaddr *)(&my_addr),addrlen) < 0)

    {

        printf("bind error\n");
close(sock_fd);
exit(1);

    }

    //3.listen

    if(listen(sock_fd,10) < 0)

    {

        printf("listen error\n");

    }

    while(1)

    {

        bzero(buf,sizeof(buf));

        //4.accept

        bzero(&addr_client,sizeof(struct sockaddr_in));

        sock_fd_new = accept(sock_fd,(struct sockaddr *)(&addr_client),&addrlen);

        if(sock_fd_new < 0)

        {

            printf("accept error\n");

        }
if(fork() == 0)//有客户链接成功,就新建一个进程。
{

            //5.recv
   while(1)
   {

                if(recv(sock_fd_new,(void *)buf,1024,0) > 0)

                {

                    printf("buf = %s\n",buf);

                }
if(strncmp(buf,"quit",4) == 0)
{

                    close(sock_fd_new);
   break;
}

            }
}

    }

    //6.close

    close(sock_fd);

    return 0;

}

一个在努力中的未来程序员,如果有更好的算法,欢迎评论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 TCP 服务器 并发