并发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()的情况,即不适用!

解答完毕!

你可能感兴趣的:(并发TCP服务器和并发UDP服务器)