找回密码
 注册
关于网站域名变更的通知
查看: 204|回复: 1
打印 上一主题 下一主题

学习Linux网络编程(一)循环服务器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-19 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1.介绍
) O6 _1 [4 M! ^& b. p
* ^' W. D3 T0 D7 x$ ~. ~
Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.! e  P; [0 F- q& o+ ~3 ?" j
2 f5 O/ ^7 p5 a
2.循环服务器模型
% _: N, ~0 }, T, C/ @+ O6 K# J0 Y

3 L* g4 Z0 N' H( B. }7 KTCP循环服务器:/ m2 T2 C) @7 g5 g* M$ j, u' A
6 X' N0 D) j4 j
算法如下:
; Z8 ^: A$ _! E$ X  J. k
& Q2 q( R5 T  B" V  i        socket(...);
7 Y6 u) j+ Q9 e) `- Q1 C        bind(...);
: b2 T! |: i/ R3 S' p. W3 y        listen(...);
& e* }. ]( G( M  H8 Z8 D. j        while(1)
  B8 a" Q6 L9 F$ ?4 N        {: |* v1 Y7 m8 x
                accept(...);; y! v# {9 ~( _1 w; p' F
                read(...);
0 h2 \: U9 R2 c- s' W8 ]                process(...);
0 I3 k+ O, y3 h* X( E/ B, d                write(...);4 G$ U' r; b! _( |' u- _" ~2 D
                close(...);//关闭客户端连接2 O  n1 E( S9 q/ y4 V
              + ?" c8 D+ J9 s" d' |6 e9 S
       }8 x# Z3 P4 L! s' w
     close(....);//关闭服务器连接
6 O) e7 T- ^5 P3 R9 i3 T3 }3 {6 L' K$ b& a- W
UDP循环服务器:9 Q1 }0 _2 w7 g4 o/ [2 g

* S1 f! {5 M3 d+ s  算法如下: & j) i/ Y/ }" ~# }; l

( S- R! A4 V: @8 L   socket(...)$ X( ~3 z, B% i" l+ }  P

/ \# `- _% W# z$ V! v- u   bind(....);
. w8 q+ q4 `# R6 i# c: Z
- h) o; t7 L% `5 w7 ^  while(1){
3 f  `1 @) F9 y7 G0 q( M
* \  i7 s6 W, Q2 l8 t0 O  recvfrom(....);7 I3 }" K5 n/ D: Q

) R, d3 p  c, H! ?' E8 g6 c# e  process(...);% _2 q2 Q+ J% H  x
! ^" k; }% Y% j
  sendto(....);+ c8 Y% h" x5 o% |" B

1 e1 r' p5 F2 c0 E: S  y close(....);//关闭客户端连接
( x9 o: I$ x2 v' s; ?2 l2 M) _5 x. K4 N
}( Y7 D4 i. O3 \* ?( P, V( {

6 O& j$ s7 ^8 B# c4 P close(....);//关闭服务器连接
) }5 w& T  N7 c9 K( H9 b- y; m! f+ n8 }" S, j( }3 w& V$ n) I
) Q3 M9 U9 v. V# k( k$ s
从上面的流程可以看出,TCP循环服务器在accept处阻塞一直等待客户端的到来,而UDP循环服务器在recv处阻塞,等待客户端发送数据., x- E; m- ?, |" V! O! ^+ o3 G. H7 u

) Q5 I" W6 {! x
/ |, ~. w5 [" o4 f1 K  j, o3. 循环服务器的例子5 ?, d4 G3 M# g7 z" L3 w

. H* d) q4 W/ y8 g! Q+ @下面的程序是一个时间服务器,客户端发出TIME时间请求,服务器将本地时间返回给客户端.: v( b- K/ w0 y: s5 y

( x# H/ L! w. Z) \& d2 m(1)TCP循环服务器- C; e6 O$ P& J
9 d& K! m: U$ C2 u: ?1 i
服务器:

) V4 R% L) [: [/ V; B2 D1 Y  Q
游客,如果您要查看本帖隐藏内容请回复

5 q1 D6 p* b$ y4 O' D8 `

该用户从未签到

2#
发表于 2019-9-19 18:02 | 只看该作者
学习一下,谢谢楼主分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:37 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表