簡體   English   中英

TCP套接字:服務器/客戶端代碼結構

[英]TCP Socket: Server/Client code structure

假設我想要一個執行此操作的C程序:1.用戶將使用輸入字符串(例如'abc')運行客戶端2.服務器將獲取字符串並將其大寫,然后返回'ABC'3.客戶端不會斷開連接,但是他可以在命令行輸入更多字符串以獲取結果。 4.可以同時連接多個客戶端(5歲以下)。

服務器的代碼結構是什么樣的? 這是我得到的:

master_socket = socket();
bind();
listen();

while(true)
{
     **int newsockfd = accept();
     if (newsockfd < 0)
         //server keeps coming to here
         continue; //no new connection
     else
     {**
        int pid = fork();

        if (pid == -1) {      /* fork() failed */
            perror("fork");
            exit(EXIT_FAILURE);
        }
        //parent
        if (pid > 0)
        {
            close(newsockfd);
            waitpid(pid, NULL, WNOHANG);
        }
        else
        {
            close(master_socket);
            //receive input string
            receive();
            modify();
            //send back string
            send();

        }
        //close(newsockfd);  **//not sure where to put**

     }

}

特別是在這種情況下,我不知道將close(newsockfd)放在哪里以及如何使用accept。

服務器現在就繼續前進。 當有新的連接時,它將正確響應。 但是它將忽略任何想要再次發送郵件的現有客戶。

因此,用戶可以輸入第一個字符串,但是用戶的第二個字符串無法到達服務器。 但是,如果我打開另一個終端,然后嘗試再次連接到服務器,它仍然可以工作。

非常感謝。

子進程必須循環處理輸入,並且不能返回到accept():在EOS上,它必須關閉接受的套接字並退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM