zoukankan      html  css  js  c++  java
  • Linux_ 多进程并发服务TCP

    client1.c

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/stat.h>
    #include <sys/un.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <signal.h>
    
    #define BUFF_SIZE 1024
    
    
    int main(void)
    {
        int sockfd;
        struct sockaddr_in server_addr, client_addr;
        int ret;
        int pd;
        char buff[BUFF_SIZE];
    
        sockfd = socket (AF_INET, SOCK_STREAM, 0);
        server_addr.sin_addr.s_addr = inet_addr("10.10.0.9");
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(9000);
    
    
        ret = connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
        if (ret == -1) {
            perror("connect");
            exit(errno);
        }
    
        sprintf(buff, "process(%u) send msg", getpid());
        ret = write(sockfd, buff, strlen(buff)+1);
        if (ret == -1) {
            perror("client write");
            exit(errno);
        }
    
        ret = read(sockfd, buff, sizeof(buff));
        if (ret == -1) {
            perror("client read");
            exit(errno);
        }
    
        printf("received: %s
    ", buff);
    
        exit(0);
    }
    

    server1.c

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/stat.h>
    #include <sys/un.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <signal.h>
    
    #define BUFF_SIZE 1024
    
    void handle_sigchld(int sig)
    {
        printf("catch a sig(%d)
    ", sig);
        wait(NULL);
    }
    
    static void str2up(char *p)
    {
        while (*p) {
            if (*p >= 'a' && *p <= 'z') {
                *p = *p - 'a' + 'A';
            }
            p++;
        }
    }
    
    int main(void)
    {
        int sockfd, clientfd;
        struct sockaddr_in server_addr, client_addr;
        int ret;
        int pd;
        char buff[BUFF_SIZE];
        //socklen_t len = sizeof(struct sockaddr_in);
        socklen_t len= sizeof(struct sockaddr);
    
        sockfd = socket (AF_INET, SOCK_STREAM, 0);
        server_addr.sin_addr.s_addr = htons(INADDR_ANY);
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(9000);
    
        ret = bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
        if (ret == -1) {
            perror("bind");
            exit(errno);
        }
    
        ret = listen(sockfd, 5);
        if (ret == -1) {
            perror("listen");
            exit(errno);
        }
    
        signal(SIGCHLD, handle_sigchld);
    
        while (1) {
            clientfd = accept(sockfd, (struct sockaddr*)&server_addr, &len);
            if (clientfd == -1) {
                perror("accept");
                exit(errno);
            }
            printf("clientfd=%d
    ", clientfd);
            pd = fork();
            if (pd == -1) {
                perror("fork");
                exit(errno);
            } else if (pd == 0) {
                close(sockfd);
    
                ret = read(clientfd, buff, sizeof(buff));
                printf("Process(%d),ret=%d, received: %s
    ", getpid(), ret, buff);
    
                str2up(buff);
    
                ret = write(clientfd, buff, strlen(buff)+1);
                printf("ret=%d
    ", ret);
    
                close(clientfd);            
                exit(0);
            } 
    
    
        }
    
        exit(0);
    }
    
  • 相关阅读:
    asp.net mvc 国际化(2) 解决问题
    asp.net mvc 国际化(1) 国际化的基础
    Silverlight自学笔记布局基础
    ASP.NET MVC form验证
    Expression Tree 入门
    JQuery 思维导图
    HashMap的Put方法(二)
    HashMap的构造函数(三)
    HashMap的数据结构(一)
    HashMap之扩容resize(四)
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384193.html
Copyright © 2011-2022 走看看