计算机网络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。公式用文字表示即…

2021高考成绩查询抖音,2021抖音很火的高考唯美的文案20个

1、用孜孜不倦去追求&#xff0c;拼搏的精神来钻研&#xff0c;让知识浇灌心田&#xff0c;用激情去迎接困难&#xff0c;用青春写意一片赞叹&#xff0c;祝愿大学生活充实饱满&#xff0c;学富五车&#xff0c;才高八斗&#xff0c;开创美丽的明天。2、如食糖蜜心里甜&#xf…

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

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

HTML5中volume样式自定义,html5中关于volume属性的使用详解

Audio对象属性&#xff1a; volume 描述&#xff1a;设置或返回音频的音量&#xff0c;取值范围(0——1)下面是我做的音乐播放器如何调节音频音量的代码&#xff1a;//增加切换音量事件(function(){var height $("#myAudio ul.control li.volume .alert-box .volume-wrap…

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参…

小学生学计算机,学计算机对小学生的好处

内容提要:随着计算机应用的日益社会化和家庭化,计算机在人们工作、学习和生活等各个方面正发挥着越来越重要的作用&#xff0c;而计算机应用基础也相应成为现代社会人们必修的文化基础课。现在的小学生将是未来的创新型人才&#xff0c;他们的计算机水平如何&#xff0c;直接关…

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…

html5专著,参考文献专著

参考文献类型&#xff1a;专著[M]&#xff0c;会议论文集[C]&#xff0c;报纸文章[N]&#xff0c;期刊文章[J]&#xff0c; 学位论文[D]&#xff0c; 报告[R]&#xff0c; 标准[S]&#xff0c; 专利[P]&#xff0c;论文集中的析出文献[A]关于你又知道多少呢?下面是小编为大家整…

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

自从加入了短视频自媒体运营这个行业以后&#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 管理的版本串在一起就组成了…

计算机应用技术专业全国排名,计算机应用技术专业全国排名

排名学校名称等级排名学校名称等级排名学校名称等级1清华大学A19武汉大学A37合肥工业大学A2浙江大学A20华南理工大学A38苏州大学A3北京航空航天大学A21电子科技大学A39江苏大学A4华中科技大学A22大连理工大学A40大连海事大学A5北京大学A23天津大学A41中山大学A6上海交通大学A24…

python中加减乘除是什么数据类型_python中,数字类型计算

说明&#xff1a; 今天在看python数字类型的操作&#xff0c;在此记录下。 操作过程&#xff1a; 1.数字的加减乘除 >>> 2 2 4 >>> 4 - 2 2 >>> 2 - 4 -2 >>> 2 * 2 4 >>> 2 / 2 #除法的结果会返回小数的结果&#xff0c;如果是…