poptest老李谈Socket
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。
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等等类都会用到这个类。
poptest老李谈Socket的更多相关文章
- POPTEST老李谈Debug和Release的区别(c#)
POPTEST老李谈Debug和Release的区别(c#) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...
- POPTEST老李谈JVM、JRE、JDK、java ee sdk with jdk区别
POPTEST老李谈JVM.JRE.JDK.java ee sdk with jdk区别 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等 ...
- poptest老李谈数据库优化总结
poptest老李谈数据库优化总结 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088 ...
- poptest老李谈动态口令原理
poptest老李谈动态口令原理 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908 ...
- poptest老李谈分布式与集群 1
poptest老李谈分布式与集群 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...
- poptest老李谈jvm的GC
poptest老李谈jvm的GC poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...
- POPTEST老李谈Debug和Release的区别(c#) 1
POPTEST老李谈Debug和Release的区别(c#) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...
- poptest老李谈分布式与集群
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- poptest老李谈数据结构中深度优先和广度优先
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
随机推荐
- C++ 中的 delete[] 机制剖析
本文简单总结了delete[]放在析构函数中VS放在主函数中的区别(针对自己定义类). delete原理简单剖析(摘至https://zhidao.baidu.com/question/1540902 ...
- Webpack学习系列(二)
一: 安装: npm install webpack-dev-server -g npm install webpack-dev-server --save (下载到当前文件夹) npm instal ...
- 4105: [Thu Summer Camp 2015]平方运算
首先嘛这道题目只要知道一个东西就很容易了:所有循环的最小公约数<=60,成一条链的长度最大为11,那么我们就可以用一个很裸的方法.对于在链上的数,我们修改直接暴力找出并修改.对于在环上的数,我们 ...
- CLAHE的实现和研究
CLAHE算法对于医学图像,特别是医学红外图像的增强效果非常明显. CLAHE https://en.wikipedia.org/wiki/Adaptive_histogram_equalizati ...
- private关键字实现控制新建类数量
private关键字作为一个重要的关键字,我们在开发中会经常用到,可是你有没有想过通过private关键字我们可以创建一个别人无法通过new来新建的类呢?下面我们就来看一下: package retu ...
- C#实体类生成XML与XML Schema文档
一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...
- perl 获取系统时间
最近需要将字符串转换成时间,找了下资料,实战如下,发现时timelocal费了些时间 strftime也可在 c / c++ / awk / php 中使用,用法基本一致. 这个也不错 $time = ...
- Vue开源项目库汇总
最近做了一个Vue开源项目库汇总,里面集合了OpenDigg 上的优质的Vue开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. UI组件 elem ...
- connect函数的用法
无论流式套接字(如TCP)还是数据报(如UDP),均可以使用connect函数.对于流式套接字,使用connect函数后,建立固定地址的连接,之后可以使用send/rev函数进行数据收发.对于数据报, ...
- java算法 蓝桥杯(题+答案) 方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...