您现在的位置是:首页 > 文章详情

socket编程 套接字编程 (纯理论,以后补一下实现代码)

日期:2018-11-02点击:298

基本概念

 

套接字——应用层和传输层之间,提供应用传输接口

Web/RPC/中间件——应用层之上的网络开发

应用编程接口API(application programming interface)

套接字接口(socket interface)简称套接字,是一种API。

 

socket API

一个进程可能会创建多个套接字,不同的进程会创建自己的套接字。

当客户端创建套接字希望与服务端进行通信时,通过端口号来分辨与服务端的哪一个应用进程进行通信(为什么不通过IP地址进行分辨,因为服务端主机上有多个应用进程在运行,每个应用进程可能会使用多个套接字。单单通过IP地址不足以分辨出是与哪一个套接字进行通信)

 

套接字对内对外使用的管理机制不同

标识通信端点(对外)——IP地址+端口号——这是针对TCP/IP的

操作系统/进程如何管理套接字(对内)——套接字描述符(socket  description)

一个进程创建一个套接字的时候,会返回一个套接字描述符。操作系统在管理内部套接字的时候,都是通过套接字描述符来引用的(操作系统使用套接字描述符来管理套接字的时候, 就是一种套接字抽象机制,这种抽象机制类似于文件的抽象。Unix操作系统对于套接字管理和文件管理,是一个管理,也就是说他把套接字看成是一个特殊的文件;Windows操作系统是分开管理的。)。

 

 

socket API函数

1、socket函数——创建套接字

调用socket函数成功之后,会返回一个套接字描述符(sd)

socket函数的三个参数:

1)、Protofamily)(协议族)——用于说明我的套接字面向哪种协议

2)、tyep(套接字类型)

3)、proto(协议号)

值为0代表用的是默认协议

例子——创建流套接字代码段

 

2、closesocket函数——关闭连接(Unix中的函数名是close,没有socket,记住)

 

3、bind函数——为套接字设置本地端点地址信息(即IP地址+端口号)

熟知端口号——web服务器就是80,sftp是25,以此类推

客户端一般不必调用bind函数

如果服务器有多个网卡,也就是有多个IP地址,该如何处理,绑定哪一个IP地址呢——使用地址IP体制通配符 INADDR_ANY

 

4、listen函数——服务端监听状态

 

5、connect函数——客户端

 

6、accept函数

当服务器调用accept,取走客户端的连接请求之后,就会创建新的套接字。真正与客户端创建连接的,就是这个新套接字。

 

7、send,sendto函数——用于发送数据

 

8、recv、recvfrom函数——用于接受数据

 

9、setsockopt、getsockopt——套接字参数设置和套接字参数读取

 

 

套接字面向TCP/IP可以创建的服务类型

应用层要通信,就要创建套接字。套接字假期了应用层和传输层的一个接口。

如果我创建的套接字的面向TCP的,就是流式套接字;如果是面向UDP而创建的套接字,就是数据报套接字;如果是直接面向网络层的套接字,则是原始套接字

 

 

网络应用中Socket API(TCP)调用的基本流程

 

 

客户端软件的设计

1、解析各个功能函数

    

    

 

2、TCP客户端软件流程

   

 

3、UDP客户端软件流程

    

 

 

 

 

 

 

 

 

原文链接:https://yq.aliyun.com/articles/681157
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章