java socket 工具_基于JAVA Socket的底层原理分析及工具实现

前言

在工作开始之前,我们先来了解一下Socket

所谓Socket,又被称作套接字,它是一个抽象层,简单来说就是存在于不同平台(os)的公共接口。学过网络的同学可以把它理解为基于传输TCP/IP协议的进一步封装,封装到以至于我们从表面上使用就像对文件流一样的打开、读写和关闭等操作。此外,它是面向应用程序的,应用程序可以通过它发送或接收数据而不用过多的顾及网络协议。

那么,Socket是存在于不同平台的公共接口又是什么意思呢?

形象的说就是“插座”,是不同OS之间进行通信的一种约定或一种方式。通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。Socket 的典型应用就是 Web 服务器和浏览器,浏览器获取用户输入的 URL,通过解析出服务器的IP地址,向服务器IP发起请求,服务器分析接收到的 URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。

问题又来了,不通过系统之间能否进行Socket通信呢?

首先,我们了解一下常用操作系统中的Socket。

在 UNIX/Linux 系统中,为了统一对硬件的操作,简化接口,不同的硬件设备都被看成一个文件。对这些文件的操作,就等同于对磁盘上普通文件的操作。

你也许听很多高手说过,UNIX/Linux 中的一切都是文件!那个家伙说的没错。

学过操作系统的同学可能知道,当对文件进行I/O操作时,系统通常会为文件分配一个ID,也就是文件描述符。简单来讲就是系统对文件的操作转化为

对文件描述符的操作,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接。

同样的,网络连接也被定义为是一种类似的I/O操作,类似于文件,它也有文件描述符。

所以当我们可以通过 Socket来进行一次通信时,也可以被称作操作网络文件的过程。在网络建立时,socket() 的返回值就是文件描述符。有了这个文

件描述符,我们就可以使用普通的文件操作函数来传输数据了,例如:

用 read() 读取从远程计算机传来的数据;

用 write() 向远程计算机写入数据。

不难发现,除了不同主机之间的Socket建立过程我们还不清楚,Socket的通信过程就是简单的文件流处理过程。

在Windows系统中,也有类似“文件描述符”的概念,但通常被称为“文件句柄”。因此,本教程如果涉及 Windows 平台将使用“句柄”,如果涉及Linux

平台则使用“描述符”。与UNIX/Linux 不同的是,Windows 会区分 socket 和文件,Windows 就把 socket 当做一个网络连接来对待,因此需要调用专们<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值