【问题标题】:TCP Socket: Server/Client code structureTCP Socket:服务器/客户端代码结构
【发布时间】:2011-11-06 10:35:00
【问题描述】:

假设我想要一个 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**

     }

}

特别是,我不知道在哪里关闭(newsockfd)以及在这种情况下如何使用accept。

服务器现在只是继续前进。当有新连接时,它将正确响应。但它会忽略任何想要再次发送内容的现有客户。

所以用户可以输入第一个字符串,但用户的第二个字符串无法到达服务器。但是如果我打开另一个终端,并尝试再次连接到服务器,它仍然可以工作。

非常感谢。

【问题讨论】:

    标签: c sockets networking tcp


    【解决方案1】:

    子进程必须循环处理输入,并且不能返回到accept():在EOS它必须关闭接受的套接字并退出。

    【讨论】:

    • @JJLiu 不,它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多