计算机网络之套接字SOCKET
来源:互联网 发布:乱世王者兵营升级数据 编辑:程序博客网 时间:2024/06/05 23:46
当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口。
此接口再将控制权传递给计算机的操作系统。操作系统将此调用转给某个内部过程,并执行所请求的操作。
内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。
系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即应用编程接口 API(Application Programming Interface)。
关于TCP/IP协议最著名的API就是BerkeleyUNIX 操作系统定义的套接字接口(socketinterface)。微软公司在其操作系统中采用了套接字接口 API,形成了一个稍有不同的 API,并称之为 Windows Socket。
请注意,在套接字以上的进程是受应用程序控制的,而在套接字以下的运输层协议软件则是受计算机操作系统的控制。因此,只要应用程序使用TCP/IP协议进行通信,它就必须通过套接字与操作系统交互并请求其服务。
当应用进程需要使用网络进行通信时就发出系统调用,请求操作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。
操作系统为这些资源的总和用一个叫做套接字描述符的号码来表示,并把此号码返回给应用进程。应用进程所进行的网络操作都必须使用这个号码。
通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该“号码”相关的所有资源。
下图描述了操作系统所创建的套接字描述符与套接字数据结构的关系:
由于在一个机器中可能同时出现多个套接字,因此需要一个存放套接字描述符的表,而每一个套接字描述符有一个指针指向存放套接字的地址。
当套接字被创建后,它的端口号和 IP 地址都是空的,因此应用进程要调用 bind(绑定)来指明套接字的本地地址。在服务器端调用 bind 时就是把熟知端口号和本地IP地址填写到已创建的套接字中。这就叫做把本地地址绑定到套接字。
服务器在调用 bind 后,还必须调用listen(收听)把套接字设置为被动方式,以便随时接受客户的服务请求。UDP服务器由于只提供无连接服务,不使用 listen 系统调用。
服务器紧接着就调用 accept(接受),以便把远地客户进程发来的连接请求提取出来。系统调用 accept 的一个变量就是要指明从哪一个套接字发起的连接。
- 计算机网络之套接字SOCKET
- 计算机网络之套接字SOCKET
- 计算机网络:什么是套接字(Socket)?
- 【计算机网络】基础知识--套接字socket的组成及作用
- Socket 之 2: UDP套接字
- 初识windows编程之socket套接字
- windows编程之socket套接字2
- linux socket套接字超时之setsockopt
- MFC小笔记之Socket套接字
- VC之socket套接字编程
- linux socket套接字超时之setsockopt
- Socket之UDP套接字小例子
- C#编程之Socket套接字编程
- 网络套接字socket编程之TCP
- 网络套接字socket编程之UDP
- Python之socket(套接字)
- 计算机网络之Socket
- 【计算机网络】TCP套接字通信
- jsp中显示list 以及 c:forEach标签的使用
- 鸟哥的Linux私房菜10.12 档案权限与目录配置(root身份)
- 图片自适应放大缩小
- KMP 算法
- C常用函数的实现
- 计算机网络之套接字SOCKET
- 一个苹果证书供多台电脑开发使用——导出p12文件
- XCode调试技巧–设置全局断点快速定位问题代码所在行
- 2016年校招开始了,Are you ready ?
- No Team Selected:A team must be selected to run 'ProjectName' on iPhoneName
- WebGL 显示的文字变模糊
- 只恨当初没有你——C++等级选择篇(一)
- cocos2dx-3.8.1在Windows--vs2013上的项目创建
- Linux教程之ubuntu下手动编译php-amqp扩展教程