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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1.介绍" `+ ^. R7 t$ O

5 h( u  E9 [7 SLinux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.
, Q' I$ [6 O2 K2 s
( H4 ]) c/ Q! _3 m! p- G& n2.循环服务器模型8 L5 _7 U$ x4 n8 {, F& c& ?
) l; R  }" N( I
TCP循环服务器:# N; _% |- |9 r2 v2 C# Y
) r2 c( Y, K1 @' L& h
算法如下:
/ V. `. n2 ^8 I0 p+ b/ p! u7 n( S+ H8 w4 G9 ?- G* E
        socket(...);6 c" J8 j. `  e* S) h
        bind(...);
# n% q* x+ I+ E3 {& z        listen(...);
; T8 o# u6 A6 C. a        while(1)3 K! q; {: {* S$ C0 j
        {" i5 \$ O1 b( {5 {2 H' |
                accept(...);2 a3 z# M* P& b: v9 \% W
                read(...);
- T4 \, m: f6 k/ ?3 `                process(...);
. D9 c8 \2 u- r9 b0 w                write(...);
, H6 F9 o. y/ M# A6 ]8 ^                close(...);//关闭客户端连接
* v2 E; V8 j& c" T) [- x, Q              . D! d* A: B" i
       }2 q* y+ E: I  B0 f
     close(....);//关闭服务器连接
/ R. z& L* |7 a- ~4 N) ~1 [
  e: o) q5 e4 ]UDP循环服务器:
- j+ u4 e$ U, A5 g  P! D* Y% r) H8 `2 t; w' M" \
  算法如下:
6 F7 v/ H$ d( n" M& o
# ^4 B& ]) n4 s' U# t( m   socket(...)6 I; ]. }8 `" E* @

4 K8 j* [* _' F* o2 T   bind(....);! u# o# N- F9 y! X) k) x& U

7 o5 F* X* n/ {5 _  while(1){# r. k, w9 }! U, Q( ]
! c" p+ {3 {) r/ }5 |; B# K* O
  recvfrom(....);
" T8 i0 E) e+ u4 O
/ f* e, e$ F( n3 ~+ ^& w- P8 a  process(...);! F) k7 W0 g6 p4 B5 L5 A
/ F/ Q2 r2 {5 x6 `4 ^
  sendto(....);4 l+ K! c7 s/ \5 L/ J% [5 [
: }! F& r& `+ W! T6 e
close(....);//关闭客户端连接 3 g. R$ |' L1 H" a
# B1 r8 {. a- g  G- v) O% P1 m( r
}# _& e' j! x! C! j( |
( g+ s1 e* _* q( M; ]6 M
close(....);//关闭服务器连接
* R7 i  x) p6 T# @( Y
3 a8 E, k. h- E2 `) G: j1 y5 [/ r+ a8 w( _, X
从上面的流程可以看出,TCP循环服务器在accept处阻塞一直等待客户端的到来,而UDP循环服务器在recv处阻塞,等待客户端发送数据.
9 y* y3 J& ?3 c& x
1 Z- \' k2 p, W- l1 K- \- c6 u) O# _) ]0 h$ C& D3 |
3. 循环服务器的例子
, s3 x- H: b- t: y- y) W. l

$ w7 n$ K; f- {7 K' r下面的程序是一个时间服务器,客户端发出TIME时间请求,服务器将本地时间返回给客户端.
- B) ]. d6 }' P! P4 @: y2 G6 t
/ E% d) l8 t6 W' w: f2 g(1)TCP循环服务器
( y% b% J! f- L0 L& X) d; [

: X* w* _0 {% r4 `: L) ?# k7 f服务器:
" |/ r3 g6 k$ N" M
游客,如果您要查看本帖隐藏内容请回复
6 ^- u$ K8 z2 l: `) E

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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