Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
438 views
in Technique[技术] by (71.8m points)

c - 套接字允许多个客户端(Sockets allow multiple clients)

I have very simple server and chat but i cant figure out how to allow multiple clients.

(我有非常简单的服务器和聊天程序,但我不知道如何允许多个客户端。)

Most of code is what we get from teacher in school.

(大部分代码是我们从学校老师那里得到的。)

int sock_desc = socket(AF_INET, SOCK_STREAM, 0);
    char ccc = '
';
    char *p_buf;
    if (sock_desc == -1)
    {
        printf("cannot create socket!
");
        return 0;
    }

    // configure socket
    struct sockaddr_in server;  
    memset(&server, 0, sizeof(server));  
    server.sin_family = AF_INET;
    // INADDR_ANY = 0.0.0.0
    server.sin_addr.s_addr = INADDR_ANY;  
    server.sin_port = htons(7777);  
    if (bind(sock_desc, (struct sockaddr*)&server, sizeof(server)) != 0)
    {
        printf("cannot bind socket!
");
        close(sock_desc);  
        return 0;
    }
    // 20max connections
    if (listen(sock_desc, 20) != 0)
    {
        printf("cannot listen on socket!
");
        close(sock_desc);  
        return 0;
    }

    struct sockaddr_in client;  
    memset(&client, 0, sizeof(client));  
    socklen_t len = sizeof(client); 
    int temp_sock_desc = accept(sock_desc, (struct sockaddr*)&client, &len);  
        if (temp_sock_desc == -1)
        {
            printf("cannot accept client!
");
            close(sock_desc);  
            return 0;
        }

        char buf[200];  
        int k;  

        int Second_sock_desc = socket(AF_INET, SOCK_STREAM, 0); 
        if (Second_sock_desc == -1)
        {
            printf("cannot create socket!
");
            return 0;
        }


        // configure socket
        struct sockaddr_in Second_client;  
        memset(&Second_client, 0, sizeof(Second_client));  
        Second_client.sin_family = AF_INET;  
        Second_client.sin_addr.s_addr = inet_addr("127.0.0.1");  
        Second_client.sin_port = htons(17777);  

        // connect socket
        if (connect(Second_sock_desc, (struct sockaddr*)&Second_client, sizeof(Second_client)) != 0)
        {
            printf("cannot connect to server!
");
            close(Second_sock_desc);
        }

        while(1) 
        {      
            // SEND RECV STUFF
            }


        close(temp_sock_desc);  
        close(sock_desc);  
        close(Second_sock_desc);  
        printf("server disconnected
");
        return 0;  
        }

i found out that i need to make some while(1) loop for accept() function and recv/send stuff so i tried but it still wont work.

(我发现我需要对accept()函数进行一些while(1)循环并接收/发送内容,因此我尝试了一下,但仍然无法正常工作。)

My goal is to make it easy without some too advanced stuff but i cant figure out how to do it.

(我的目标是在没有一些太高级的东西的情况下使其变得容易,但是我不知道该怎么做。)

I will be thankful for any help.

(感谢您的帮助。)

  ask by Kvikino translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...