1、什么是socket

Socket是应用层与TCP/IP协议族通信的中间抽象层,它是一组接口,应用层通过调用这些接口实现发送和接收数据。一般这种抽象层由操作系统提供或者由JVM自己实现。使用socket可以简单地实现应用程序在网络上得通信,一台机器上的应用想socket写入信息,另外一台相连的机器能读取到。TCP/IP协议族中分两种socket类型,分别是流套接字和数据报套接字,分别对应TCP协议和UDP协议。一个TCP/IP套接字由一个互联网地址,一个协议及一个端口号唯一确定。

如图2-3-1,socket抽象层在传输层与应用层之间,增加这一层是很有必要跟有用的,它类似于设计模式中的门面模式,用户没必要知道和处理复杂的TCP/IP协议族业务逻辑的细节,这时socket就展现出它的优势了,它把这些复杂处理都隐藏在socket接口下面,它帮助用户解析组织TCP/IP协议族报文数据,以符合TCP/IP协议族,这样用户只要简单调用接口即可实现数据的通信操作。

 

图2-3-1 socket抽象层





2、Java中socket

上面了解了什么是socket,那么socket在Java中又是怎样的?Java为TCP协议提供了两个类,分别为Socket和ServerSocket,一个代表客户端,一个代表服务器端。通过操作这两个类即可实现TCP协议通信。而对于UDP协议,Java则对应提供了DatagramSocket类用于UDP协议通信。

3、关于地址

既然要通信,那必然涉及要跟谁通信,只有确定了你的目标地址是什么,才能将信息准确传递到正确的机器上。一般可以通过IP字符串或者主机名(例如www.baidu.com,这种方式是通过DNS进行解析成IP字符串)两种方式来确定一个目标地址。从前面的IP协议学习可以知道,IP地址实际是一个网络的地址,并非一个机器的地址,所以准确上说一台主机通过IP协议的连接,其实是一台主机与IP所确定的那个网络之间的连接。

在Java中,提供了一个InetAddress类来代表一个网络目标地址,包含IP属性跟主机名属性,IP一共有两个版本,分别是使用32位的IPv4和128位的IPv6,根据不同的IP协议版本,又衍生出两个子类,Inet4Address和Inet6Address。InetAddress对域名解析是使用本地机器配置或者网络命名服务(如域名系统DNS)来实现,InetAddress默认会缓存一段有限时间的域名与IP地址的映射,这样访问相同的地址就不需要重复发送DNS请求,很大地提高了效率。InetAddress实例一旦创建了,就不可再变化,始终指向一个地址。在接下来要介绍的ServerSocket,Socket,DatagramSocket等等类都会用到这个类。

socket系列之什么是socket的更多相关文章

  1. C# Socket系列二 简单的创建 socket 通信

    看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...

  2. C#网络编程系列文章(五)之Socket实现异步UDPserver

    原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...

  3. C#网络编程系列文章(一)之Socket实现异步TCPserver

    原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...

  4. C# Socket系列一 简单的创建socket的监听

    socket的应用场景,在快速,稳定,保持长连接的数据传输代码.Http也是socket封装出来的,基于一次请求一次回复,然后断开的socket连接封装. 比如我们常见的游戏服务器,目前的很火的物联网 ...

  5. socket系列之socket服务端与客户端如何通信

    上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...

  6. socket系列之服务器端socket——ServerSocket类

    一般地,Socket可分为TCP套接字和UDP套接字,再进一步,还可以被分为服务器端套接字跟客户端套接字.这节我们先关注TCP套接字的服务器端socket,Java中ServerSocket类与之相对 ...

  7. flash as3 socket安全服务网关(socket policy file server)

    关键字: SecurityErrorEvent socket as3 flash有着自己的一套安全处理模式,在socket方面,我这样的菜鸟无法理解他的好处:一句话,不怀好意的人如果想用flash写一 ...

  8. python socket 编程之一:编写socket的基本步骤

    一.socket 编写server的步骤: 1.第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family ...

  9. Windows socket之最简单的socket程序

    原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...

随机推荐

  1. jstl标签库示例一

    package app05a;/** * 书籍对象 * @author Administrator * */public class Book {        private String isbn ...

  2. ML笔记:Deep Learning

    非DL:要找好的特征 DL:无需找好的特征,但新问题:要设计好的网络架构

  3. Redis常用命令--Lists

    List是一个双向链表,按照插入顺序排序,可以添加一个元素到头部或者尾部.当对一个空key执行插入操作的时候会创建一个新表. 如果要清空列表,则会杀出对应的key空间. 在List中保存了头节点和未节 ...

  4. noip2017"退役"记

    day0 口胡了一下去年的六道题,感觉很稳,看了6集动漫,0点钟就去睡了. day1 早上被一阵革命练习曲吵醒,而我还是窝在被子里不想起床(-﹃-)~zZ.于是室友开始放起了lost river... ...

  5. bzoj 2118: 墨墨的等式

    Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...

  6. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. python中如何将生成等差数列和等比数列

    在python库numpy 中提供了函数linspace和logspace函数用于生产等差数列和等比数列.     1.linspace函数生成等差数列 def linspace(start, sto ...

  8. 【TensorFlow 官网 可以直接访问】让中国开发者更容易地使用TensorFlow打造人工智能应用

    人工智能的神奇之处,在于它能被应用在医疗保健.交通运输和环境保护等方方面面,为复杂的社会问题探寻解决方案.如今,在人工智能的协助下,人们得以探索全新的研究领域,开发创新的产品,让数以百万计的用户从中获 ...

  9. JVM中判断对象是否存活的方法

    Java中几乎所有的对象实例都存放在堆中,在垃圾收集器对堆内存进行回收前,第一件事情就是要确定哪些对象还“存活”,哪些对象已经“死去”(即不可能再通过任何途径被使用). 引用计数算法 首先需要声明,至 ...

  10. Mybatis Generator 代码生成配置

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...