美文网首页
C++入门到放弃(二),EchoServer与fork模型

C++入门到放弃(二),EchoServer与fork模型

作者: chanming | 来源:发表于2016-11-13 18:41 被阅读0次

    目标

    EchoServer,就是客户端输入什么,服务器接收后以同样的数据返回。

    代码


    我们在上一章节的代码上新增了如下的代码,这段代码的意思是当能够从socket里面读出数据时,我们将原数据写回。我们用telnet可以测试这么一段代码。
    当时我们很快也发现,我们一次只能够接受客户端的连接,当我们用第二个telnet的时候,发现程序并没有得到我们预期的结果。这是因为程序阻塞在了read函数中。所以,我们需要一个多进程/多线程的模型来支持这样的操作。

    fork函数

    fork函数可以用来创建一个新的进程。新的进程是对父进程的拷贝。

    • 第7行,我们使用fork函数来申请一个子进程。fork函数有两次返回(主进程一次,子进程一次,我们通过pid来判断是主进程还是子进程。)

    我们注意到子进程中x的值也是1024,同时也打印出"program over",因为子进程是对父进程的一个拷贝。

    fork网络模型

    fork网络模型是一种简单而又常见的网络模型,其主进程负责监听有没有新的连接,但accept到一个新的链接后,主进程会创建一个子进程,让子进程处理与客户端的通信。

    • 81-87行,当我们accpet到一个客户端的时候,我们fork一个新的进程,并让子进程执行DoEcho的操作,这里我们注意到一个很有趣的现象。因为子进程是复制主进程,所以两个进程同时维持该socket链接。所以我们需要关闭掉一个。

    为了验证我们刚刚的说法,我们把上文低84行的注释去掉
    ,我们在我们在DoEcho的时候输出操作的主进程号。


    我们看到了父进程与子进程分别进行了一次doecho的操作。从client链接我们也发现需要2次关闭。


    同理,子进程也可以关掉listen socket。最后,代码如下:

    相关文章

      网友评论

          本文标题:C++入门到放弃(二),EchoServer与fork模型

          本文链接:https://www.haomeiwen.com/subject/vdscpttx.html