当前课程知识点:JAVA程序设计进阶 > 第四章 网络编程(上) > 4.4 Socket通信原理 > Video
这一节我们将介绍
Socket通讯原理
也就是说如何在
两个java程序之间
建立网络连接
首先介绍一下TCP传输协议
那TCP传输协议
是我们互联网当中
最常用的传输协议
它提供的是面向连接的传输
它可以提供可靠的流式数据传输
那这个过程打比喻的话
有点类似我们打电话的过程
如果我们的同学打过电话
都知道在你拨完电话以后
都会有一小段时间
需要来建立连接
那建立连接的目的
就是为了能够很好的
把我们的语音进行传输
那在我们进行
java网络编程的时候
用TCP的话
也可以是实现一种
基于连接的可靠的
流式数据传输的方式
那在java当中有好几个类
都是使用TCP协议
来进行网络通讯
比如说URL URLConnection
Socket ServerSocket等类
这些都使用的TCP协议
来进行网络通讯
那这个Socket通讯的
原本原理是什么呢
它是通过网络上的两个程序
采用一个双向的通讯连接
来实现数据的交换
这个双向链路的一端
称之为一个socket
那我们用socket的话
通常是用来实现
客户方与服务方之间的连接
下面我们看看这个图示
我们有一个服务器
服务器上面有可能会提供
各种各样的服务
比如说它可以提供http服务
通过端口80来提供服务
那我们互联网上有很多用户
比如说这个用户
通过这个网络连接
连接到我们这个服务器上的
这个http服务
有可能另外一个用户
也通过这个网络连接
连接到我们的这个服务器上
那除了http服务
还可以有别的服务
比如说SMTP
也就是我们的发邮件的服务
那我们客户端
可以和我们服务端的
SMTP这个服务来进行连接
再有可能就是多个客户
连接到同一个服务上面
那同样的道理
我们一个服务器
也可以提供多种服务
比如说我们这个服务器
除了提供http和SMTP服务外
它也有可能提供ftp服务
那我们另外的客户就会连接到
我们这个服务器的ftp服务上面
还有一种服务
比如叫远程登录服务telnet
也会有这个客户通过连接
连到我们服务器的这个服务上面
所以这些图上大家可以看到
我们的Client我们的客户端
会和我们的Server端进行通讯
那我们的Server端的话
它会提供多种Services
也就是说提供多种服务
那怎么用Socket
来去达到客户端和服务端
这个连接的这个目的呢
基本上是这样的
就是说我们在客户端
它有个客户端的Socket
然后在Server端的话
也会有个Server端的Socket
那由客户端向我们的服务端
发出一个Socket连接请求
那我们Server收到这个请求以后
给予积极的响应
给它返回一个响应信号
这样的话在我们的客户端
和Server端之间
就建立了一个Socket连接
那我们再把刚才这个连接过程
做一个细致入微的一个描述
首先在Server端的话
它会有一个这个ServerSocket
这个类一个对象
它一直在运行着
那运行着它就等待
它等待什么呢
等待说有没有客户端
主动发起请求
想要和服务端连接
你看我们这个客户端
发起一个request
那发出一个请求
发到这个服务端以后
服务端收到这个请求了以后
这个ServerSocket这个对象
它就会通过它的方法
去返回一个Socket对象
它new了一个Socket
那这个Socket
就是和我们Client Socket
这是进行对等连接的
当服务端和客户端
都建立了Socket
这个对象连接以后
再往下一步就是需要传送数据
那所谓传送数据的话
实际上就是通过Socket对象
获得这个双方的输入输出流
那获得输入输出流了以后
就可以数据的读写
比如说我们可以从客户端
发一个数据发到服务端
那服务端接收完了以后
也可以从服务端
再发送一个数据
发回给这个客户端
那这个发送数据的过程
实际上采用就是IO读写的方式
那当网络这个连接
建立起来了以后
所谓的网络通讯
其实就变成的我们的IO读写
当客户端和服务端
都完成它读写的目的以后
我们再下一步
需要把这个Socket给它关闭
比如在Client端用Close
然后在服务端用Close
这样把两个Socket对象
都关闭了以后
那整个这个通信过程
也就结束了
这一节我们介绍的
Socket通讯的基本原理
-1.0 导学
--Video
-1.1 线程的基本概念
--Video
-1.1 线程的基本概念--作业
-1.2 通过Thread类创建线程
--Video
-1.2 通过Thread类创建线程--作业
-1.3 线程的休眠
--Video
-1.3 线程的休眠--作业
-1.4 Thread类详解
--Video
-1.5 通过Runnable接口创建线程
--Video
-1.5 通过Runnable接口创建线程--作业
-1.6 线程内部的数据共享
--Video
-2.0 导学
--Video
-2.1 线程同步的思路
--Video
-2.2 线程同步的实现方式—Synchronization
--Video
-2.3 线程的等待与唤醒
--Video
-2.4 后台进程
--Video
-2.5 线程的生命周期与死锁
--Video
-2.6 线程的调度
--Video
-3.0 导学
--Video
-3.1 线程安全与线程兼容与对立
--Video
-3.2 线程的安全实现-互斥同步
--Video
-3.3 线程的安全实现-非阻塞同步
--Video
-3.4 线程的安全实现-无同步方案
--Video
-3.5 锁优化
--Video
-4.0 导学
--Video
-4.1 URL对象
--Video
-4.2 URLConnection对象
--Video
-4.3 Get请求与Post请求
--Video
-4.4 Socket通信原理
--Video
-4.5 Socket通信实现
--Video
-5.0 导学
--Video
-5.1 Socket 多客户端通信实现
--Video
-5.2 数据报通信
--Video
-5.3 使用数据报进行广播通信
--Video
-5.4 网络聊天程序
--Video
-6.0 导学
--Video
-6.1 Java虚拟机概念
--Video
-6.2 Java虚拟机内存划分
--Video
-6.3 Java虚拟机类加载机制
--Video
-6.4 判断对象是否存活算法及对象引用
--Video
-6.5 分代垃圾回收
--Video
-6.6 典型的垃圾收集算法
--Video
-6.7典型的垃圾收集器
--Video
-7.0 导学
--Video
-7.1 集合框架与ArrayList
--Video
-7.2 LinkedList
--Video
-7.3 HashMap与HashTable
--Video
-7.4 TreeMap与LinkedHashMap
--Video
-7.5 HashSet
--Video
-8.0 导学
--Video
-8.1 Java反射机制
--Video
-8.2 Java静态代理
--Video
-8.3 Java动态代理
--Video
-8.4 Java 反射扩展-jvm加载类原理
--Video
-8.5 Java进阶课程总结
--Video