计算机网络dst,计算机网络基础课程—Socket接口

什么是TCP/IP------本课程的主要部分

TCP/IP如何工作-----TCP/IP软件结构与实现

如何用TCP/IP-------TCP/IP应用程序编程接口

前面说过,TCP/IP标准并不指定应用程序与TCP/IP协议软件的接口,但并不是说没有提供任何指导,首先,它指定了一些必须具有的操作。这包括:

–为通信指定本地资源

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

–初始化连接(客户端)

–等待连接(服务器端)

–发送和接收数据

–生成紧急数据

–中断通信

–……

–在通信结束时释放本地资源

同时,TCP/IP标准还指定了一个概念层接口,它是作为一个阐述如何使用TCP/IP的例子,它包含了一系列过程和函数,标准建议了每个过程和函数所需要的参数及其所执行操作的语义,但没有进一步指定数据表示的细节。

仔细的接口通常由操作系统来定义,只要完成TCP/IP标准中的功能,可以有不同的细节选择。这样不同的操作系统的应用程序编程接口是各不同的。

–Berkeley Software Distribution UNIX 的 Socket 接口是广泛使用的

–Windows的接口定义Winsock接口

–System V的接口定义TLI接口

–……

操作系统提供的应用程序编程接口又分为两类:

–直接由操作系统内核提供的系统调用

BSD UNIX socket

–在操作系统外以库函数的方式提供的各种可调用函数

Windows socket

一、系统调用

–当应用程序要进行系统调用,首先是把控制交到系统调用接口,接口再把控制转到操作系统,由操作系统调用相应的内部进程来执行请求的操作,内部进程完成后,操作系统再通过调用接口把控制权返回应用程序

7e418ef5b3abe5bb3f7480b45beb81ce.png

在TCP/IP协议加入操作系统后,操作系统可以有两种方式来帮助应用程序访问内核的TCP/IP协议

–用一种新的系统调用

–用通常的I/O调用来访问TCP/IP

完全用第一种方案较少,因为这样要把所有的概念操作都重新设计

采用第二种方案:通过重载通常的I/O调用使得访问协议与通常的I/O一样。

较多采用混合方法:易重载的重载,不易重载的用新函数。

UNIX的基本的I/O函数(一般设备或文件的I/O操作)

–open:为I/O操作准备设备或文件

–close:终止使用前面打开的设备和文件

–read:从输入设备或文件获取数据

–write:向输出设备或文件传输数据

–lseek:移到设备或文件指定的位置

–ioctl:控制设备或访问它的软件

一旦打开某个设备或文件,就给它分配一个描述号,

–int desc;

–desc=open(“filename”,O_RDWR,0)

在后面,应用程序将使用 desc 来对该文件进行标识并进行读写操作

–read(desc,buffer,128)

完成相关操作后,关闭

–close (desc)

–在BSD UNIX中,使用重载上述的I/O调用来实现对协议的部分访问。同时又一些功能不能重载,需要设计一些新的函数

BSD UNIX Socket 使用混合模式

BSD UNIX Socket 在设计时还考虑到支持多种通信协议,因此,协议族名称往往是一些函数的参数。TCP/IP是一个单一的协议族

BSD UNIX Socket 要求必须使用服务类型来指定操作而不是指定某个协。

以下为几个在完成socket进程通信机制中需要的系统调用(以下以BSD UNIX为例)

sockid=socket(family,type,protocol) //创建socket

–其中: family:地址族,即协议族

–Type:协议服务类型

–Protocol:具体协议

–sockid:UNIX用于标识该socket的整数,

bind(sockid,localaddr,addrlen)

//将本地socket地址(本地地址,本地端口)与所创建的scoket号联系起来,

–其中localaddr:指向socket地址结构的指针,TCP/IP的socket地址结构:

struct sockadd_in{

u_short sin_family; //指明协议族

u-short sin_port; //端口号

struct in_addr sin_addr; //IP地址

char sin_zero[8]; //未用

}

–addrlen:地址结构的长度(以字节为单位)

connect(sockid, destaddr, paddrlen)

//用于建立socket连接

–sockid:欲建立连接的本地socket号

–destaddr:指向对方socket地址结构的指针

–paddrlen:对方socket地址长度

listen(sockid,quelen)

//服务器用于确认它愿意建立客户请求的连接

–sockid:本地socket号,服务器将从它上面接收客户请求

–quelen:请求队列的长度,

newsock=accept(sockid, clientaddr, paddrlen)

//用于面向连接的服务器建立socket连接

–sockid:欲建立连接的本地socket号

–clientaddr:指向客户socket地址结构的指针

–paddrlen: 客户socket地址长度

–newsock:一个新的socket号

发送数据的系统调用(write)

–面向连接

write(sockid,buff,bufflen)//缓冲发送

writev(sockid,iovector,vectorlen)//集中发送

send(sockid,buff,bufflen,flags)//可控缓冲发送

–面向无连接

sendto(sockid,buff,bufflen,flags,dstadd,addrlen)//可控缓冲发送

sendmsg(sockid,message,flags)//可控缓冲发送

接收数据的系统调用(read)

–与发送的调用是一一对应的,有些参数所不同

其它与socket有关的系统调用

此外socket调用中还有一些给程序员用的实用函数,例如整数转换函数等等以实现不同体系结构的兼容性。因为BSD UNIX socket调用是支持多协议族的。(这也是socket函数复杂、受到批评的一个原因)

调用的时序关系:

3cd7d4c90e4edf8faa77bfcce1c82376.png

ef9b566b7dc74225205525c88322ce00.png

利用socket实现并发服务器的例子:

bdf186e8012d70083572480d1f492204.png

int initsockid,newsockid;

if((initsockid=socket(…))<0)

error(“cant creat scoket”);

if(bind(initsockid,localaddr,addrlen)<0

error(“bind error”);

if(listen(initsockid,5)<0)

error(“listen error”);

for(;;){

newsockid=accept(initsockid,…)

if(newsockit<0)

error(“accept error”);

if(fork()==0){

close(initsockid);

do(newsockid);

exit(o);

}

close(newsockid);

}

除了完成socket的系统功能调用,BSD UNIX还提供了一套预定义的符号常量和数据结构声明,应用程序可以用它们来声明数据、指定变量。例如:符号常量SOCK_DGRAM 和 SOCK_STREAM分别说明采用树举报服务还是流服务

这些声明定义在两个头文件中:

–#include

#include

二、在操作系统外以库函数的方式提供可调用函数

7d4ae2745d13068bed36ca5b749c483d.png

f44f0398fd41b368bb93190c9303d4c6.png

Winsock API函数

–WSAStartup:初始化scoket库

–WSACleanup: 终止使用scoket库

–scoket:创建

–connect:

–closesocket:

–bind

–listen

–accept

–……

其它

举报/反馈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python输入圆的半径公式_[图文]铁路曲线正矢的计算公式

一、圆曲线正矢的计算1.1 圆曲线正矢的计算公式取圆曲线上两点拉一直线,叫做弦。弦上任意点至曲线上的垂直距离叫矢或叫矢距。在弦中央点的矢距叫正矢(下图)。AB一弦;AC、CB一半弦;CD一正矢;EF一矢距正矢计算公式为其中: f-正矢 C-弦长 R-半径 式中单位均为m。公式用文字表示即…

docker 安装nacos_康过来!Nacos配置和管理微服务的使用

Nacos 具有如下特性:服务发现和服务健康监测&#xff1a;支持基于DNS和基于RPC的服务发现&#xff0c;支持对服务的实时的健康检查&#xff0c;阻止向不健康的主机或服务实例发送请求&#xff1b;动态配置服务&#xff1a;动态配置服务可以让您以中心化、外部化和动态化的方式管…

matlab中如何调用gpu进行并行计算_极致安卓-Termux/Aid learning开启WebGL手机GPU并行计算...

在我的之前的测评中&#xff0c;我利用Termux和Aid Learning测试过基于C/C的openmp并行程序&#xff0c;基于Java的并行程序&#xff0c;还有基于MPI以及基于Java的分布式集群并行。但是很遗憾&#xff0c;一直无法成功开发基于OpenCL的GPU并行编程。这是主要是因为Android并没…

python默认编码方式_关于设置python默认编码方式的问题

2019-8-27 07:45:36 本帖最后由 傻纸 于 2019-8-27 10:02 编辑 查了一会资料得出的结论是如果你用的是python3.x&#xff0c;那么就最好别去设置sys.defaultencoding或者sys.stdout.encoding 记住在需要编码的时候用encode&#xff0c;解码的时候decode就可以了。。。 这个问题…

计算机科学与技术是属于什么学科,计算机科学与技术专业属于什么大类 属于哪个学科...

近日&#xff0c;有很多人咨询小编计算机科学与技术专业属于什么大类 属于哪个学科&#xff1f;现在小编统一回复一下大家计算机科学与技术专业属于工学类&#xff0c;下面是关于计算机科学与技术专业详细的介绍。1计算机科学与技术专业门类及学科介绍专业名称专业代码门类学科…

matlab imread_MATLAB图像处理:29:在几何变换输出中指定填充值

本示例说明如何指定imwarp执行几何变换时使用的填充值。执行转换时&#xff0c;输出图像中通常会有一些像素不属于原始输入图像。必须为这些像素分配一些值&#xff0c;称为填充值。默认情况下&#xff0c;imwarp将这些像素设置为零&#xff0c;并显示为黑色。使用FillValues参…

micopython 18b20_MicroPython控制8*8LED点阵显示温度

MicroPython顾名思义就是可以在单片机上跑的Python&#xff0c;借助Micro Python&#xff0c;用户完全可以通过Python脚本语言实现硬件底层的访问和控制&#xff0c;比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。目前支持MicroPython的开发板有好几种&#…

ip变更会影响账号登陆吗_【教程】PUBG账号被盗导致封禁申诉解封教程

很多朋友询问PUBG在被盗号后被盗号者开挂导致永封该如何申诉解封&#xff0c;现在结合一些玩家被盗号及成功申诉的经历&#xff0c;详列一下步骤。本方法只适用于被盗后开挂导致封禁的账号&#xff0c;那些自己开挂被封的孤儿不用往下看了。一.先向steam客服申诉 找回自己的ste…

滤镜怎么调_手机、电脑怎么剪辑视频?真心求推荐实用工具

自从加入了短视频自媒体运营这个行业以后&#xff0c;我就开始接触到各种各样的手机、电脑视频剪辑、制作软件&#xff0c;用它们来处理、完成被安排到的工作任务。很多时候&#xff0c;我也用它们来剪视频&#xff0c;借此来练练手、积累下素材。记得刚进入这个行业的时候&…

2021计算机基础知识题库,2021~2021计算机基础知识练习题

2021~2021计算机基础知识练习题 2021~2021计算机基础知识练习题 北京联合大学 2021~2021计算机基础知识练习题 一、选择题 1.记录在存储介质上的一组相关信息的集合称为______。 A)程序 B)磁盘 C)软件 D)文件 2.当一个文件更名后&#xff0c;文件的内容会______。 A)完全消失 B…

计算机背板知识,你知道背板的选购技巧吗?

原标题&#xff1a;你知道背板的选购技巧吗&#xff1f;背板就是母板&#xff0c;子板插在上面构成系统&#xff0c;计算机背板说成背板也成立&#xff0c;只不过背板更多的知识线路板而已&#xff0c;没有实际的器件&#xff0c;只起信号通路作用。背板在设备机箱的后面。一般…

git 切换分支_git 入门教程之分支总览

分支就是一条独立的时间线,既有分支,必有主干,正如一棵树谈到树枝,必有树干一样的道理.我们先前对git 的全部操作默认都是在主干上进行的,这个主干也是一种特殊的分支,名为 master 分支.无论是穿越历史还是撤销更改,我们都或多或少接触过时间线,git 管理的版本串在一起就组成了…

正在锁定计算机 win7转圈圈打不开,Win7网络连接图标一直转圈的原因和解决方法...

Win7网络连接图标一直转圈是什么情况&#xff1f;如果用户发现Win7系统中的网络图标一直处在转圈状态&#xff0c;则表示该网络不能正常加载&#xff0c;且无法识别&#xff0c;笔者通过检查发现网络依赖的服务Network List Service没有自动启动&#xff0c;启动之后可解决该问…

jvm内存模型和java内存模型_JVM运行时内存模型综述

JVM内存模型JVM分为五个区域&#xff1a;虚拟机栈、本地方法栈、方法区、堆、程序计数器。JVM不同区域的占用内存大小不同&#xff0c;一般情况下堆最大&#xff0c;程序计数器较小。JVM五个区中虚拟机栈、本地方法栈、程序计数器为线程私有&#xff0c;方法区和堆为线程共享区…

getline没有与参数列表匹配的重载函数_C++新增基础功能解析—函数重载功能的使用...

喜欢的可以收藏转发加关注“函数重载”指的是可以有多个同名的函数&#xff0c;因此 名称进行了重载。这两个术语指的是同一回事&#xff0c;但我们通常使用函数重载。可以通过函数重载来设计• 系列函数——它们完成相同的工作&#xff0c;但使用不同的参数列表。重载函数就像…

公关文秘专业要学计算机,文秘相关专业有哪些

文秘相关专业有哪些引导语&#xff1a;想必大多数人对文秘这个岗位都不陌生&#xff0c;那么与文秘相关专业有哪些呢&#xff1f;接下来是小编为你带来收集整理的文章&#xff0c;欢迎阅读&#xff01;一、中文类专业&#xff1a;中文及相关专业主要包括汉语言文学、汉语言、中…

java seek指针 换行符_Java网络编程探究|乐字节

大家好&#xff0c;我是乐字节小乐&#xff0c;上次给大家讲述了Java中的IO流之输出流|乐字节&#xff0c;本文将会给大家讲述网络编程。主要内容如下&#xff1a;网络 网络分层 IP位置 端口port 网络编程一、 网络 1、概念网络即将不同区域的电脑连接到一起&#xff0c; 组成局…

switch 条件判断_C语言学习第7篇---C语言三大结构之一判断结构

if语句分析1.if语句用于根据条件选择执行语句2.else不能独立存在且总是与它最近的if想匹配3.else语句后可以接其他if语句if语句中零值比较的注意点---bool型变量应该直接出现在条件中&#xff0c;不要进行比较---变量和0值进行比较时&#xff0c;0值应该出现在比较符合左边---f…

计算机应用基础授课提纲,《计算机应用基础》讲授提纲(1).ppt

《计算机应用基础》讲授提纲(1).ppt (49页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分*第四讲 Windows基础基本操作文件操作控制面板中文操作处理磁盘管理命令提示符*Windows 基本操作桌…

工业机器人演示码垛和卸垛_众多企业购买自动码垛机的原因是什么?

企业为什么要购买自动码垛机呢?难道仅仅是因为它可以自动&#xff0c;让工作变得轻松简单吗?当然不是&#xff0c;如果自动码垛机仅仅能够为企业带来这么点的好处的话&#xff0c;相信是没有企业愿意花大价钱来购买这些自动码垛机的&#xff0c;那么企业究竟是看中了自动码垛…