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等等类都会用到这个类。

java socket是什么_socket系列之什么是socket相关推荐

  1. java socket 断开连接_Socket断开不报错(Java)

    网上看了很多关于Socket的Demo,用起来挺好用也简单,不过都在断开连接时,都没有做好相关处理,导致每次主动断开时,会报错 如: java.net.SocketException: Socket ...

  2. java socket 断开连接_Socket.IO-client.java重复断开连接并重新连接

    我在我的节点服务器上使用socket.io-client.java和socket.io 1.2.1为我的android项目和android套接字与服务器连接正常但几分钟后它会自动断开连接并重新连接 . ...

  3. Java知多少(105)套接字(Socket)

    网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www ...

  4. Java包数据消息头消息尾_读Socket流时产生阻塞的解决方案(粘包拆包问题)

    转自:https://www.cnblogs.com/qhyuan1992/p/5385289.html 其实最终讨论的是TCP通信过程中的粘包拆包(半包)问题. 在用socket写一个服务器时遇到了 ...

  5. Java私塾跟我学系列——JAVA篇 第四章Java类和对象

    教学目标: i面向对象基础 i掌握对象的三大特性 i掌握Java类的构建 i掌握如何使用Java类 i理解引用类型 i理解按值传递和按引用传递 i深入理解变量 i掌握包装类 i理解类型转换 i理解Ja ...

  6. php读取西门子plc_基于Socket访问西门子PLC系列教程(二)

    本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:[公众号dotNet工控上位机:thinger_swj] 基于Socket ...

  7. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  8. JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载

    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet ...

  9. Java I/O系统学习系列二:输入和输出

    编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象."流"屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇 ...

  10. 「一入 Java 深似海 」系列课程

    第一期 「一入 Java 深似海 」系列课程 - 第一期 第一节:Java 语言基础 转载于:https://www.cnblogs.com/wangjunwei/p/10393306.html

最新文章

  1. mac os x安装php7.0和phalcon3.0
  2. srm32f4按键蜂鸣器_stm32 用中断实现按键点灯和蜂鸣器鸣叫(固件库版)
  3. 用计算机求锐角A,B,计算机操作题
  4. springcloud不使用数据库微服务启动异常解决
  5. 阿里人工智能实验室招聘计算机视觉算法专家-交互图像方向
  6. 高清精美壁纸:2013年6月桌面日历壁纸免费下载
  7. Linux下创建、删除软链接
  8. SLAM会议笔记(三)V-LOAM
  9. CSS概述 CSS声明
  10. MyBatis笔记(一) 最简单的select
  11. 电脑卡慢怎么办,是什么原因,怎么处理Sysmain
  12. 在ArcGIS中ArcCatalog(Arcmap)快速选中多个要素
  13. 如何快速统计Excel单元格中有几个数字
  14. 用Word2003打开.docx文档
  15. [Linux] 如何在 Linux 电脑上制作专业的视频教程
  16. ps制作20种特效文字_如何使用会声会影进行质感文字制作——动态扫光浮雕特效...
  17. php 做支付宝接口 防钓鱼时间戳,ThinkPHP实现支付宝接口功能
  18. FCS五色石 | 项目半月报(2020.5.1-2020.5.15)
  19. [又值奥运季] 2016年里约奥运会--8月16日赛事
  20. 华为HCNA安全培训认证要多少钱?

热门文章

  1. Linux下PCB的task_struck结构体
  2. 网站瞬间变黑白颜色代码
  3. 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.2 BP神经网络...
  4. 任天堂网站“要求的内容有误”解决方法
  5. 什么是编程?为什么要编程?
  6. Mongodb实验二——分片集群搭建
  7. 前端可视化大屏适配方案
  8. [Tableau] Tableau知识技能
  9. 第6次课程作业—张欣
  10. 什么是智能制造成能力成熟度模型?