并发TCP服务器和并发UDP服务器

第一问:

    在UNP(UNIX网络编程第1卷--中文版)书上的第46页说明了并发TCP服务器的工作流程,但fork()出来的子进程端口号和父进程端口号相同(书上的ftp服务器都是21)。

    在UNP(UNIX网络编程第1卷--中文版)书上的第525页说明了并发UDP服务器的工作流程,但fork()出来的子进程端口号和父进程端口号不同。

    那他们(子进程和客户端)分别是怎么通信的呢?

    并发UDP服务器的工作流程,我看了下tftp-hpa-0.40.tar.gz的源码,确实是如UNP(UNIX网络编程第1卷--中文版)书上的第525页所说。fork()子进程,在子进程中socket()生出新端口,bind()绑定新端口,connect()与客户端通信。

    并发TCP服务器的工作流程,我看了下linux-ftpd-0.17.tar.gz的源码,它也是fork()出子进程来处理链接,与上一条基本相同,与UNP(UNIX网络编程第1卷--中文版)书上的第46页所说基本相同

    但就并发TCP服务器策略而言,有很多,在这介绍一下:

    1.迭代服务器(最基础原始的)for(;;)或while(1)。

    2.为每个用户fork()一个进程,就如上面的FTP服务器采用的策略。

    3.预先派生子进程服务器程序,每个子进程各自accept()。

    4.为每个用户pthread_create()一个线程,每个线程用已连接的套接口和客户端通信。

    5.预先创建线程服务器程序,每个线程各自accept()。

    6.预先创建线程服务器程序,主线程统一accept()。

解答完毕!

第二问:

    在TCP中,可以用socket(), bind(), listen()建立一个sock_fd用于监听,当收到客户端的信息后调用accept()又可以产生新的套接口号,我们暂叫它new_sock_fd,以区别于先前用于监听的sock_fd。当用户大量多时就形成了并发。于是就产生了许多new_sock_fd。我们可以用I/O复用如:select()等对这些套接口进行管理。

    在UDP中,可以用socket(), bind(), 建立一个sock_fd用于监听,但不能产生新的套接口。当用户大量多时就形成了并发,我们怎么处理这些并发呢?我看到也有用I/O复用的如:select(),但它是怎么产生这么多新套接口的呢?

    解答:UDP服务器只能走并发UDP服务器的工作流程(fork()子进程,第一问中解释过了),所以不存在UDP服务器用select()的情况,即不适用!

解答完毕!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值