计算机网络II
张淼
计算机学院
It is time to write simple C/S program-server
2
Cont.
3
Cont.
4
Cont.
5
Client
6
Cont.
7
Result
8
fgets
stdin writen read
TCP TCP
stdout client readline writen server
fputs
1. 1. 客户从标准输入读入一行文本客户从标准输入读入一行文本,,并写回服务器并写回服务器
2. 服务器从网络输入读入这行文本,并回射给客
户
3. 客户从网络输入读入这行回射文本,并显示在
标准输出.
9
多进程并发服务器
父进程主要用于获取客户端连接父进程主要用于获取客户端连接((不与客户端直接不与客户端直接
通信通信))
对于新的连接对于新的连接forkfork一个新的子进程进行处理一个新的子进程进行处理
父子进程避免使用对方的父子进程避免使用对方的socketsocket
多进程并发服务器
#include
pid_t fork(void);
Returns: 0 in child, process ID of child in parent, -1 on error
对于对于forkfork
子进程复制父进程的所有进程内存到其内存地址空间子进程复制父进程的所有进程内存到其内存地址空间子进程复制父进程的所有进程内存到其内存地址空间子进程复制父进程的所有进程内存到其内存地址空间
中中。。父父、、子进程的子进程的 ““数据段数据段””,, ““堆栈段堆栈段””和和 ““代码代码
段段””完全相同完全相同,,即子进程中的每一个字节都和父进程即子进程中的每一个字节都和父进程
一样一样
子进程的当前工作目录等环境变量和父进程相同子进程的当前工作目录等环境变量和父进程相同,,
forkfork之前父进程打开的文件描述符之前父进程打开的文件描述符,,在子进程中同样在子进程中同样
打开打开
子进程拥有自己的进程子进程拥有自己的进程IDID
程序的并发版本
intint main(main(intint argcargc, char *, char *argvargv[]) {[]) {
fork();fork();
printfprintf("Hello! ");("Hello! ");
return 0;return 0;
}}}}
输出输出::
HelloHello
HelloHello
程序的并发版本
intint mai