博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Socket套接字简介
阅读量:6231 次
发布时间:2019-06-21

本文共 1342 字,大约阅读时间需要 4 分钟。

hot3.png

 Socket套接字

Socket套接字由远景研究规划局(Advanced Research Projects Agency, ARPA)资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将TCP/IP协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了Socket套接字。Linux系统采用了Socket套接字,因此,Socket接口就被广泛使用,到现在已经成为事实上的标准。与套接字相关的函数被包含在头文件sys/socket.h中。

18.3.1  Socket套接字简介

Socket的英文原意是"插座",作为类UNIX系统的进程通信机制,它如同插座一样方便的帮助计算机接入互联网通信。

任何用户在通信之前,首先要先申请一个Socket号,Socket号相当于自己的电话号码。同时要知道对方的电话号码,相当于对方有一个Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是向电话机发出信号和从电话机接受信号的过程,相当于Socket发送数据和从Socket接受数据。通话结束后,一方挂起电话机,相当于关闭Socket,撤销连接。

由此可见,Socket的通信机制与电话交换机制非常相似。Socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。每一个Socket都用一个半相关描述。

{协议,本地地址,本地端口}。 

一个完整的Socket则用一个相关描述:

{协议,本地地址,本地端口,远程地址,远程端口}。 

每一个Socket有一个本地的唯一Socket号,由操作系统分配。套接字有3种类型:流式套接字(SOCK_STREAM)、数据包套接字(SOCK_DGRAM)和原始套接字。

流式套接字可以提供可靠的、面向连接的通信流。如果通过流式套接字发送了顺序的数据:1、2。那么数据到达远程时候的顺序也是1、2。

流式套接字可用于Telnet远程连接、WWW服务等需要使数据顺序传递的应用,它使用TCP协议保证数据传输的可靠性。流式套接字的工作原理如图18.9所示,我们将网络中的两台主机分别作为服务器和客户机看待。

 
(点击查看大图)图18.9  流式套接字的工作原理

 

数据包套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠性。数据包套接字使用者数据包协议UDP,数据只是简单地传送到对方。数据包套接字的工作原理如图18.10所示。

 
(点击查看大图)图18.10  数据套接字的工作原理

原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。原始套接字主要用于一些协议的开发,可以进行比较底层的操作。它功能强大,但是没有上面介绍的两种套接字使用方便,一般的程序也涉及不到原始套接字。

转载于:https://my.oschina.net/wuweixiang/blog/2240238

你可能感兴趣的文章
git 常用操作
查看>>
iReport 中创建JavaBeanDataSource,用java类提供数据源给iReport
查看>>
大数据时代下的生活
查看>>
spring定时任务(方便轻巧)
查看>>
iOS的主要框架介绍
查看>>
spring源码阅读笔记(一)
查看>>
Selenium的简单安装和使用
查看>>
ios 滤镜
查看>>
linux系统学习第七天-<<工程师技术>>
查看>>
android中利用socket上传文件
查看>>
使用scrapy的定制爬虫-第二章-概
查看>>
【转】常见Java面试题
查看>>
数据库无法创建函数
查看>>
Shell字符串比较
查看>>
python3中二维List数据的三种处理方法及比较
查看>>
chrame 谷歌浏览器 a标签不能获得焦点 解决办法
查看>>
Java专家系列:CPU Cache与高性能编程
查看>>
Curl函数学习
查看>>
nginx
查看>>
枚举类型 enum,NS_ENUM,NS_OPTIONS
查看>>