客户端/服务端软件概述


前言

提示:这里可以添加本文要记录的大概内容:

这里只是了解一下大致的过程,后面有一个实验专门针对客户端/服务端通信的,
这里的代码就不进行粘贴,自己目前读起来有点费劲,实验做完了,有时间就贴出来


提示:以下是本篇文章正文内容

一、客户端基本功能

1.解析服务器IP地址

客户端可能使用域名(如:study.163.com)或IP地址(如: 123.58.180.121)标识服务器,但是, IP协议需要使用32位二进制IP地址

(1)函数inet_addr( ) 实现点分十进制IP地址到32位IP地址转换

(2)函数gethostbyname( ) 实现域名到32位IP地址转换,返回一个指向结构hostent 的指针

hostent结构体:包含32位IP地址

struct hostent 
{
	char FAR* h_name; /*official host name */
	char FAR* FAR* h_aliases; /*other aliases */
	short h_addrtype; /*address type */
	short h_lengty; /*address length */
	char FAR* FAR* h_addr_list; /*list of address */
};
#define h_addr h_addr_list[0]

2.解析服务器端口号

客户端还可能使用服务名(如HTTP)标识服务器端口,需要将服务名转换为熟知端口号

通过调用函数getservbyname( ) ,返回一个指向结构servent的指针

servent结构体:包含端口号

struct servent
{
	char FAR* s_name; /*official service name */
	char FAR* FAR* s_aliases; /*other aliases */
	short s_port; /*port for this service */
	char FAR* s_proto; /*protocol to use */
};

3.解析协议号

客户端可能使用协议名(如:TCP)指定协议,需要将协议名转换为协议号(如: 6)

通过调用函数getprotobyname ( ) 实现协议名到协议号的转换,返回一个指向结构protoent的指针

protoent结构体:包含协议号

struct protoent 
{
	char FAR* p_name; /*official protocol name*/
	char FAR* FAR* p_aliases; /*list of aliases allowed*/
	short p_proto; /*official protocol number*/
};

二、客户端实现

1.TCP客户端软件流程

1.确定服务器IP地址与端口号
2.创建套接字
3.分配本地端点地址(IP地址+端口号)
4.连接服务器(套接字)
5.遵循应用层协议进行通信
6.关闭/释放连接

2.UDP客户端软件流程

1.确定服务器IP地址与端口号
2.创建套接字
3.分配本地端点地址(IP地址+端口号)
4.指定服务器端点地址,构造UDP数据报
5.遵循应用层协议进行通信
6.关闭/释放套接字

三、服务器软件设计

1.循环无连接(Iterative connectionless)服务器

循环这里是指一次只处理一个,处理完后,接着处理下一个

软件流程:

1.创建套接字
2.绑定端点地址(INADDR_ANY+端口号)
3.反复接收来自客户端的请求
4.遵循应用层协议,构造响应报文,发送给客户

数据发送:服务器端不能使用connect()函数,无连接服务器使用sendto()函数发送数据报
在这里插入图片描述
获取客户端点地址:调用recvfrom()函数接收数据时,自动提取
在这里插入图片描述

2.循环面向连接(Iterative connection-oriented)服务器

设计流程:

1.创建(主)套接字,并绑定熟知端口号;
2.设置(主)套接字为被动监听模式,准备用于服务器;
3.调用accept()函数接收下一个连接请求(通过主套接字),创建新套接字用于与该客户建立连接;
4.遵循应用层协议,反复接收客户请求,构造并发送响应(通过新套接字);
5.完成为特定客户服务后,关闭与该客户之间的连接,返回步骤3.

3.并发无连接(Concurrent connectionless)服务器

设计流程:

主线程1: 创建套接字,并绑定熟知端口号;
主线程2: 反复调用recvfrom()函数,接收下一个客户请求,并创建新线程处理该客户响应;
子线程1: 接收一个特定请求;
子线程2: 依据应用层协议构造响应报文,并调用sendto()发送;
子线程3: 退出(一个子线程处理一个请求后即终止)。

4.并发面向连接(Concurrent connection-oriented)服务器

设计流程:

主线程1: 创建(主)套接字,并绑定熟知端口号;
主线程2: 设置(主)套接字为被动监听模式,准备用于服务器;
主线程3: 反复调用accept()函数接收下一个连接请求(通过主套接字),并创建一个新的子线程处理该客户响应;
子线程1: 接收一个客户的服务请求(通过新创建的套接字);
子线程2: 遵循应用层协议与特定客户进行交互;
子线程3: 关闭/释放连接并退出(线程终止) .


总结

提示:这里对文章进行总结:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
客户端服务端的功能实现是指在一个分布式系统中,客户端服务端各自承担的功能和责任。以下是一般情况下客户端服务端的功能实现的概述客户端的功能实现: 1. 用户界面:客户端负责展示给用户的界面和交互逻辑,包括用户输入、界面展示、事件触发等。 2. 用户输入处理:客户端接收用户输入,对其进行验证、转换和处理,确保输入的有效性和合法性。 3. 网络通信:客户端服务端之间建立网络连接,并通过网络传输数据。客户端负责发送请求给服务端,并接收和解析服务端返回的响应。 4. 本地缓存:客户端可以缓存部分数据或资源,提高系统性能和用户体验。 5. 安全性:客户端负责对用户身份进行验证,确保只有合法用户可以访问系统,并保护用户数据的安全。 6. 客户端逻辑处理:客户端根据业务需求,对接收到的数据进行处理、计算、展示等操作,以提供用户所需的功能和信息。 服务端的功能实现: 1. 请求处理:服务端接收来自客户端的请求,解析请求参数,并根据请求的类型和路径确定相应的处理逻辑。 2. 业务逻辑处理:服务端根据业务需求,对接收到的请求进行处理,包括数据查询、修改、计算、验证等操作。 3. 数据持久化:服务端负责将数据持久化存储,可以使用数据库或其他持久化方式来存储和管理数据。 4. 安全性:服务端负责对来自客户端的请求进行权限验证和安全防护,以保护系统和用户数据的安全。 5. 与其他服务的交互:在分布式系统中,服务端可能需要与其他服务进行通信和交互,以获取或提供数据和功能。 6. 响应生成与发送:服务端根据处理结果生成响应数据,并将响应发送给客户端客户端服务端的功能实现是相互协作的,客户端负责与用户进行交互并将请求发送给服务端服务端负责处理请求并返回响应给客户端。通过合理的功能划分和协作,可以实现一个完整的分布式系统。具体的功能实现方式会根据具体的技术栈、开发框架和业务需求而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值