irpas技术客

【网络编程】第2章(2) 应用程序接口(API)_小梁说代码_api编程

网络 8358

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

应用程序接口(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的取值及含义

值宏说明0shut_RD不允许本地socket进行读1shut_WR不允许本地socket进行写2shut_RDWR不允许本地socket进行读写
练习 简述系统调用以及系统调用与一般调用的差别 一般调用,往往是在用户态,一个函数调用另一个函数,或一个过程调用另一个过程,开销很小。 系统调用,是用户态的程序调用操作系统的内核服务,开销大,因为往往内核上下文环境进行来回切换描述基于数据报套接字的C/S通信过程 基于UDP的C/S通信过程更简单 客户端创建socket后,就能直接调用sentto()原语发送报文,不管连接与否和发送到与否,然后接收的话就直接调用recvfrom()原语来接收报文 服务器创建socket后,同样先进行绑定bind(),和客户端类似,不断的接收报文recvfrom()后,进行sentto()的报文发送,不断的轮询

如何写得不错就点个赞吧,欢迎来我的个人博客网站😊·


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #api编程