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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1.介绍
' Z0 h, h6 x% {$ w/ V5 k, @

  U: P3 d3 G" g) ^5 i9 V6 X& z0 yLinux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.
5 F, O6 x0 X" y7 I- d4 Y
2 ^7 q8 d# n+ M/ I2.循环服务器模型
- S5 I8 M! x2 v, b  H/ r! P
, e2 E2 p$ e! S0 a; h* E
TCP循环服务器:
2 F) W* W1 A8 L" U

. s1 w6 W- [1 X$ s" D/ \算法如下:
( U/ N" C3 [) _; b! ]
6 G" a9 ^& t/ g; ^0 {  e        socket(...);
( j- z7 a' F8 ]/ V, ]+ w3 J+ ^        bind(...);3 o: X& \. N; i; i4 I# R1 A4 H
        listen(...);
' u" i+ y( O; B        while(1): Y7 }' [) o7 [8 R" [( B2 w+ e
        {
8 r3 `0 f# U3 D6 J6 v  y  Q0 i                accept(...);
/ ^, H# |; z* m! A! Q" \                read(...);
% Z2 G/ g7 b: |0 O5 E; N                process(...);1 U8 `2 l: d' u" D2 n0 H+ Q
                write(...);
: U. g8 x4 y, I) n& P2 i* Z                close(...);//关闭客户端连接$ N0 |* j& n7 o2 ?
              ) [$ ]1 S3 N5 l% m' ?
       }
  G8 f$ B7 v. [' K  H     close(....);//关闭服务器连接9 v/ l+ z) E. c" t7 p/ t  N1 z
( U+ {% U/ f  F! O  X* E
UDP循环服务器:2 \5 [/ i1 L* k( g" r/ k  x* T
  }8 O+ v) n( b/ j: q% r" F7 o
  算法如下:
, G9 d  u. I1 l& |0 \6 f0 l5 q  `7 C) L" \$ O6 q* A3 J0 P
   socket(...)
3 u/ ]$ O& {# z7 n
9 M1 V& }* c; W4 N   bind(....);. o! T2 s$ I3 k+ a; {
: b5 _$ h9 h1 x% r. Z) d& C
  while(1){& W2 l  Q8 `4 w6 N/ ?$ S4 z) m

- C' `+ b2 {1 F  V" D# u8 k  recvfrom(....);2 e! @# x' h5 n9 Q/ Z

- {2 G& u# {; j( A8 L; E* G& n  process(...);' T4 C  J7 ^* @% M
9 V/ I+ S7 a3 C1 o* O* E  P5 S
  sendto(....);( D( }9 A6 c8 q) f6 x; ~
3 C. ?$ R6 p3 l. y5 I' n. x" g
close(....);//关闭客户端连接 + T) i: q6 T2 i$ o% Y" E8 r

; b9 }  W5 O* C: p' @+ [ }& M4 ?. [8 ~  F. t, h$ p, ]
# M! J! b6 Z7 c! u1 `1 W/ r$ `
close(....);//关闭服务器连接3 l7 ]" m, d, j% P

2 Q, V7 R1 T  H
8 X" Z3 ]; ^: G7 b  a从上面的流程可以看出,TCP循环服务器在accept处阻塞一直等待客户端的到来,而UDP循环服务器在recv处阻塞,等待客户端发送数据.; Y: \( |2 c" p' b  f7 m
1 T3 @. a8 l& P" p! j
$ m; ~4 ^0 Z. E
3. 循环服务器的例子! e+ U4 m: U/ ?
7 g& w) t5 y- A: O) z  p
下面的程序是一个时间服务器,客户端发出TIME时间请求,服务器将本地时间返回给客户端.
) F3 t, @' R$ L; E+ F: m- X) U" A9 t( |- y( ]7 V
(1)TCP循环服务器
1 F# b9 o( j* F0 c, x
8 R9 ?) I, [% z6 r
服务器:

  y: n7 }& ]3 C: N/ X) _, A
游客,如果您要查看本帖隐藏内容请回复
8 b5 o* X8 n! V. m  k

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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