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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1.介绍
9 \9 Q$ L# s5 f' u/ `& P( ]3 ^+ K# |

' H( r; ~5 p  V' d  I8 Q4 fLinux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.
2 L: U; C2 T, D; C" Z  T7 m' M, K4 _5 d8 W
2.循环服务器模型2 L7 r% R% i; {, Y

  j9 A5 O' |. I0 x7 \  LTCP循环服务器:3 Z8 ?7 n# C: K) k
1 r" n6 I( T" N5 r
算法如下:
8 d# ]9 d2 e: @, S5 J& w* M1 D7 `* m
        socket(...);
2 U9 L5 E0 o! c5 K' Y        bind(...);3 d" P3 [  `( W0 ]% t
        listen(...);
' P7 N- ?- g: G' I& s        while(1)
% U' w" S4 A) o* s7 ]+ N        {
1 M- U0 B! Z, l: x7 V! b! k+ A                accept(...);4 Z! n/ C  f* ^% o5 H6 E" j0 o. z
                read(...);
: z1 x) _+ T) ~7 i                process(...);1 E' T2 V4 I/ `# z, V
                write(...);" w9 P( a+ ?8 G& }$ p6 c, i
                close(...);//关闭客户端连接& Q- r# g- x* [
              
7 z0 y! X/ W4 N9 L! ^$ u' h/ A       }
0 }+ x, j! q3 ^& j     close(....);//关闭服务器连接- n0 @7 d# t- {7 H

2 k. N4 ?" _! w( P8 S* KUDP循环服务器:, Y$ q( B, U) Y3 ?& B: m* W

" x! a, y1 v( ~' N) t- x  算法如下:
1 @4 U9 W+ E# G+ e
6 f! D2 E& d" n   socket(...)% ^4 n$ m5 G  a' u7 h% q6 h
% T1 t& m* t5 y8 g
   bind(....);
/ V6 v' k8 ^6 W6 r- q6 K7 m
3 S& r3 p) S" v  while(1){
' @, J1 @7 J% b7 y2 i& X8 A
. U2 ~6 G# `& |2 H  recvfrom(....);) R, A0 p2 U, y  r
2 W) F4 J* O9 ~
  process(...);5 t0 c1 ?5 e$ D1 o

# r; k5 `5 w8 ~  n2 Z  sendto(....);
; P) ^$ w: J3 b# y" W2 ~# g# D- d; s# t1 n- x* w; q
close(....);//关闭客户端连接 ' }: U9 x* `! l/ r+ r" D: T" v; v0 [
* c0 @. L3 r" x3 D
}
/ F3 H. f; Q! c0 O
1 L$ D+ O: y: z) x; n0 b/ j- [ close(....);//关闭服务器连接
- A$ T6 ~1 H" ]; C6 }% {9 C
  d3 f2 Q% d8 R: K& k9 E7 m! ^9 x, Z# [6 r
从上面的流程可以看出,TCP循环服务器在accept处阻塞一直等待客户端的到来,而UDP循环服务器在recv处阻塞,等待客户端发送数据.
/ F4 c& v: z) U- Y; J' j$ t: U1 Q6 r: a3 w5 T+ ?
/ E2 s, P# U: J7 L3 U" c, Q+ o
3. 循环服务器的例子
" U9 V. w: `. e: b% b
- I2 T" q% g# v% S" X( ]; c
下面的程序是一个时间服务器,客户端发出TIME时间请求,服务器将本地时间返回给客户端.8 m0 [" {2 d1 U2 r& U

. m" A: J7 Z7 `; @(1)TCP循环服务器
9 j3 b8 q& _7 B$ u. X4 ^  B9 {# d

+ g/ W# I. M" f+ B服务器:
  u4 k, L8 Z- K# d5 ?) z/ h3 G
游客,如果您要查看本帖隐藏内容请回复
! Q3 ~$ v4 u' h

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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