【网络编程】第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()的报文发送,不断的轮询



相关文章
|
5月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
5月前
|
供应链 搜索推荐 数据挖掘
探秘京东 API 接口的神奇应用场景
京东API如同数字钥匙,助力商家实现商品、库存、订单等多平台高效同步,提升效率超80%。支持物流实时追踪,增强用户满意度;赋能精准营销与数据分析,决策准确率提升20%以上,全面优化电商运营。
165 1
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
6月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
6月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
677 152
|
5月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
235 11
|
6月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
588 11
|
6月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南