TCP/IP协议初始2.(服务器与客户)

通过TCP协议建立的通信模式,叫做流模式

一般有两种网络通信模式,流模式(使用TCP协议)、报文模式(使用UDP协议)

流模式是面向连接的,即通信双方先建立连接后才可通信,类似打电话。
相反报文模式是无连接的,不需要在通信前建立连接即可消息通信。

流模式通信的双方分为服务器、客户,即客户-服务器交互。客户和服务器是协议中非常重要的概念,协议总是按照客户、服务器的行为制定。

1.区分服务器、客户:

使用TCP的流模式下,按照谁发起连接的请求来区分服务器和客户,不同情况下谁是客户端谁是服务器不是一定的。

服务器:
首先运行,被动等待连接,不知道谁会与自己连接。
通信结束后继续运行等待连接。
客户:
随后运行,主动发起连接请求,知道要与谁连接。
通信结束后可以终止运行。

注:
服务器是一个程序(被动等待连接的程序),不是运行服务器程序的计算机。一台计算机可运行多个服务器程序。

2.连接:
客户识别服务器:服务器所在计算机的IP地址+服务器申请的端口号

由客户将服务器名字翻译为服务器所在计算机IP地址,并指定端口号,由此唯一地确定服务器。

3.通信:
服务器要同时处理多个客户,服务器分为主程序和句柄两部分,即为每个客户生成一个线程,每个线程独立地处理一个客户,客户结束,该线程结束但主程序不结束,仍然等待连接。

(P2P交互:避免把所有功能都放在一个服务器上,导致流量瓶颈,而是分成多个服务器,每个服务器只需实现功能的一部分)

4.实践(网络编程):
(套接字概念:计算机IP地址+端口号=套接字*,套接字就是TCP连接的端点。)

使用一些特定函数接口实现网络通信,使用TCP实现参见《仿QQ聊天室》。

服务器:
socket()创建一个套接字
bind()函数明确套接字的参数:IP地址,端口号
listen()准备套接字
accept()接受一个连接请求
recv()接收数据
send()发送数据
close()结束通信

客户:
socket()创建一个套接字
connect()主动申请连接服务器
send()发送数据
recv()接收数据
close()结束通信

函数有很多参数项,具体实现参考API文档。

5.注意:

服务器循环依赖:

3中提到为避免流量瓶颈,减少压力,P2P交互把功能分在多个服务器实现,每个服务器实现功能的一部分。
2中提到根据是否主动发送请求来区分客户和服务器,客户和服务器没有明确界限,可能情况A下是客户,情况B下是服务器。

如Web服务器可能需要向数据库发送请求,它就是客户,此时它依赖数据库服务器。若存在循环依赖:X1依赖X2,X2依赖X3,X3依赖X1,形成闭合链,将不停发送循环请求直到三台服务器资源耗尽

设计服务器时:每个服务器独立设计时考虑循环依赖的风险

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值