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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1.介绍
  }, p# f- s& x# ~3 ?: l
1 g3 ]+ C* B, m6 q2 r$ l5 f
Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.1 P  @  C# e1 g  e
% X0 s8 a% J+ A6 ~, z9 Q
2.循环服务器模型1 y# w4 C$ ~& Z) ^# O( Z& v

8 i% c7 Y# r# V4 N2 z. F- x5 \8 dTCP循环服务器:
3 ~( N' t6 l* {8 z) C
; b' L4 m" c' y+ w. g4 q3 I
算法如下: ! P- w5 x: p3 \8 v, w: T9 I
' N$ K4 L# y8 @. O! p; ?* l. C
        socket(...);0 Q6 }, y/ Z$ N( [
        bind(...);/ Y; P: m6 ^' F5 P9 o7 I
        listen(...);
5 S! f2 B+ Q' ^* f% V+ Q; q$ b3 Q        while(1)
) A3 H1 w1 o# \9 K        {9 [4 u0 Y! F) j  I& c/ H
                accept(...);# [5 ~- X+ m* c$ [4 B; w
                read(...);/ Y9 Y( P+ R9 v6 F, k9 S( L' `
                process(...);
  t' p7 I3 ^9 L                write(...);
5 r) {( |7 V6 Y5 J6 K0 r3 e                close(...);//关闭客户端连接
# H. ?0 {5 s% ~              
. ^- c: G( {: w2 {/ \       }
; h& S5 w8 ?# t+ J9 b  F* A1 D     close(....);//关闭服务器连接) G  M$ A! h. z! T, z* e

6 w3 L9 n7 z: d  nUDP循环服务器:: O+ w2 Y, T9 [; E4 ^; F
- D" R7 b+ w5 d# ^+ U  Y4 f- f
  算法如下:
3 m3 L5 o0 b# [, Q
3 m$ @, N9 g; }( z/ J$ A   socket(...)
/ `0 t( e. Y$ f! c$ F5 x! N8 N. G: B6 M) b3 j0 D- g6 ^6 @
   bind(....);
7 Y$ j+ u0 k. ?6 j. |) w) e& ^9 f3 |' ^' a. h) w4 N* }
  while(1){
8 \' }& Z, x, |# F) f! }+ c. O* M4 e! {5 a* r3 O! _4 B
  recvfrom(....);
. e3 g# D+ J* p% e9 s5 U7 ?" h7 J2 D0 B* [6 x/ I8 j1 k! N  u
  process(...);
( ]* S# q+ N* W+ c7 o* Y/ B  a9 i* e. E7 e0 V/ f
  sendto(....);: \$ p2 F6 B6 S3 S6 e6 Y2 E
" |" b8 i3 M  i. r1 T7 W
close(....);//关闭客户端连接
( N1 [* q4 ^8 d4 I7 \/ R9 c& K% H) F, ]  W- U3 V4 l9 Z# i! ^
}
- M/ X4 ~, o: s# A- t. g$ ^% T! c  e3 t1 }4 x
close(....);//关闭服务器连接
3 }. p0 b) V4 A4 `8 w
7 N( Y# |) w4 R; G' _
! ?, r! F) I+ `& B: C从上面的流程可以看出,TCP循环服务器在accept处阻塞一直等待客户端的到来,而UDP循环服务器在recv处阻塞,等待客户端发送数据.
; Y, h5 d7 L' k9 k, `& t1 N- A* h4 u( X2 k; J# G' Z3 k" b# [4 q

' V+ ~+ N( q4 b% a4 i: P3. 循环服务器的例子
' x6 J" Y  u; F# ?- `+ D
  c3 n% n8 r- S" E, o% p
下面的程序是一个时间服务器,客户端发出TIME时间请求,服务器将本地时间返回给客户端.4 G# {/ c4 g" V1 |* M# j6 C
, [. G# R5 A; @) p' f& I) s: Y
(1)TCP循环服务器5 X) X6 A0 u6 K1 j. @" s( I2 i  H0 B1 |

% z- `. a# b: R. e* H. W服务器:
4 J6 y) q; d5 i3 r" a
游客,如果您要查看本帖隐藏内容请回复
/ ]8 Z4 |7 b- M

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-23 22:19 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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