【网络编程】第2章(2) 应用程序接口(API)

简介: 【网络编程】第2章(2) 应用程序接口(API)

前面那章介绍了客户-服务器的原理,下面就介绍客户-服务器编程的实现原理,之后要我们自己手动编代码来完成客户-服务器的通信过程


应用程序接口(API)

操作系统定义了应用程序和协议软件(TCP/IP)之间的接口——应用程序接口


我们要做的就是通过程序调用操作系统的应用程序接口,然后通过它而调用协议软件(TCP/IP)的接口来实现网络之间通信,也就是网络编程


应用程序接口要实现的功能:


分配用于通信的本地资源;

指定本地和远程通信端点;

(客户端)发起连接;

(客户端)发送数据报;

(服务器端)等待连接的到来;

发送或接收数据;

判断数据何时到达;

产生紧急数据;

处理到来的紧急数据;

从容终止连接;

处理来自远程端点的连接终止;

异常终止通信;

处理错误条件或连接异常终止;

连接结束后释放本地资源;

网络通信的两种基本方法


设计者发明一种新的系统调用


设计者使用一般的I/O调用访问TCP/IP


套接字API

套接字就是Socket,接收所有需要通信参数后,调用系统调用的API,然后调用协议软件来进行网络通信,它本身封装了很多的方法,能够实现很多的通信中的功能


套接字API的实现提供了套接字系统调用所要使用的符号常量和数据结构声明


字被使用前,创建该套接字的应用程序必须用其他系统调用把套接字数据结构中的信息填上

下面是通信流程


创建套接字

retcode =socket( family, type, protocol )

返回值:成功 0,失败 -1 errno 记录错误代码

Family:协议族

Type:流式套接字TCP或者数据报套接字UDP

protocol :具体的协议

连接请求 connect

retcode = connect( socket, addr, addrlen)

返回值:成功 0,失败 -1

socket:创建的套接字

addr:请求连接的地址

addrlen:地址长度

绑定本地地址 bind

recode= bind( socket, localaddr, addrlen )

监听 listen

retcode = listen( socket, queuelen )

服务器使用listen使套接字处于被动状态

accept

从请求队列取请求,返回新套接字描述符,也就是句柄

retcode = accept( socket, addr, addrlen )

套接字I/O操

retcode = recvfrom(socket, buffer, buflen, flags, from, fromlen)

套接字的接收,和读文件类似

返回值: 非0 所读字节数,-1 失败

retcode = sendto(socket, msg, msglen, flags, to, tolen)

套接字的发送,和写文件类似

  • 返回值: 非0 所写字节数,-1 失败

Close

retcode = close ( socket )

shutdown

retcode = shutdown ( socket , how)

how的取值及含义

说明
0 shut_RD 不允许本地socket进行读
1 shut_WR 不允许本地socket进行写
2 shut_RDWR 不允许本地socket进行读写


练习

1.简述系统调用以及系统调用与一般调用的差别

一般调用,往往是在用户态,一个函数调用另一个函数,或一个过程调用另一个过程,开销很小。

系统调用,是用户态的程序调用操作系统的内核服务,开销大,因为往往内核上下文环境进行来回切换

2.描述基于数据报套接字的C/S通信过程

基于UDP的C/S通信过程更简单

客户端创建socket后,就能直接调用sentto()原语发送报文,不管连接与否和发送到与否,然后接收的话就直接调用recvfrom()原语来接收报文

服务器创建socket后,同样先进行绑定bind(),和客户端类似,不断的接收报文recvfrom()后,进行sentto()的报文发送,不断的轮询



相关文章
|
10天前
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
|
5天前
|
XML JSON API
深入浅出:RESTful API 设计实践与最佳应用
【9月更文挑战第32天】 在数字化时代的浪潮中,RESTful API已成为现代Web服务通信的黄金标准。本文将带您一探究竟,了解如何高效地设计和维护一个清晰、灵活且易于扩展的RESTful API。我们将从基础概念出发,逐步深入到设计原则和最佳实践,最终通过具体案例来展示如何将理论应用于实际开发中。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的指导和灵感。
|
15天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
65 6
|
20天前
|
搜索推荐 安全 API
京东商品详情的 API 探秘与应用
在数字化商业时代,准确详尽的商品信息至关重要。京东作为国内领先电商平台,提供了丰富的商品资源及强大的API接口,涵盖商品查询、订单管理等方面,助力开发者轻松获取商品详情。本文将详细介绍如何使用京东API获取商品信息,并探讨其在数据分析、比价工具及个性化推荐系统中的应用价值。使用时需注意API调用频率、数据时效性及安全性等问题。
|
1月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
188 12
|
1月前
|
API
|
2月前
|
存储 消息中间件 前端开发
Web2py框架下的神秘力量:如何轻松集成第三方API,让你的应用不再孤单!
【8月更文挑战第31天】在开发现代Web应用时,常需集成第三方服务如支付网关、数据存储等。本文将指导你使用Web2py框架无缝接入第三方API。通过实例演示从注册获取API密钥、创建控制器、发送HTTP请求到处理响应的全过程。利用`requests`库与Web2py的内置功能,轻松实现API交互。文章详细介绍了如何编写RESTful控制器,处理API请求及响应,确保数据安全传输。通过本教程,你将学会如何高效整合第三方服务,拓展应用功能。欢迎留言交流心得与建议。
37 1
|
1月前
|
域名解析 负载均衡 网络协议
Linux网络接口配置不当所带来的影响
总而言之,Linux网络接口的恰当配置是保证网络稳定性、性能和安全性的基础。通过遵循最佳实践和定期维护,可以最大程度地减少配置错误带来的负面影响。
70 0
|
1月前
|
测试技术 API 数据库
电商API接口定制与开发系列之——商品详情接口介绍
——在成长的路上,我们都是同行者。这篇关于API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 在电商API接口定制与开发系列中,商品详情接口是至关重要的一部分,它直接关系到用户浏览商品、获取商品信息的关键环节。以下是对商品详情接口的详细介绍:
|
2月前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
53 0
下一篇
无影云桌面