这是文章出处地址的超链接
感谢作者传授知识
Socket定义
- 是对网络的不同主机上的应用进程之间进行双向通信的端点的抽象,一个套接字就是一个网络端口
- 应用程序使用网络协议进行通信的接口
组成部分
- TCP/IP协议
- IP地址:网络中不同计算机的通信地址
- 端口:区分主机的不同应用程序,客户端在49152 ~ 65535中动态选择端口号,服务器使用0 ~ 49151
套接字Socket = (主机IP地址, 端口号)
两种通信方式
- TCP是可靠地面向连接的通信过程,含有三次握手四次挥手的机制。
- UDP是不可靠的无连接的通信过程,客户端只管发,不管服务端有没有接受到
实现步骤:
- 创建Server和client的ServerSocket和Socket。
- 打开链接到Socket的输入输出流
- 按照协议对Socket进行读取操作
- 关闭输入输出流、关闭Socket。
1、基于TCP的socket通信
我们拿男孩做客户端,女孩因为有很多人追求,所以做服务端,一个服务端可被多个男孩客户端请求表白。我们这里先看女孩服务端的具体步骤:
(1)创建ServerSocket对象,绑定监听端口。
(2)通过accept()方法监听客户端请求
(3)连接建立后,通过输入流读取客户端的数据
(4)通过输出流,向客户端回应信息
OK,基本的步骤就是这,我们就看一下代码。
具体的步骤已经很清晰了,我们再来看看男孩客户端的步骤:
(1)创建Socket并指定端口
(2)通过输出流向服务端发送一个请求
(3)等待服务端的回应 获取输入流,读取客户端信息(将字节流转化为字符流),并保存在缓冲区中
(4)关闭资源
下面同样使用java代码来演示一下。
这就是男孩追求女孩的代码示例,说起来也很简单。如果我们之前学习过socket编程,可能上述的这些代码难不倒我们,不过如果从基础开始入门学习,还是有必要对其两个类进行说明一下。高手可跳过:
第一个:Socket
当我们想要在Java中使用TCP/IP通过网络连接到服务器时,就需要创建Socket对象并连接到服务器。在服务端的Socket对应着连接的一个个客户端。
第二个:ServerSocket
用ServerSocket实现java服务通过TCP/IP监听客户端连接,他只存在于服务端。
2、基于UDP的Socket通信
UDP的通信模式其实是无连接的不可靠的通信协议,举个例子,花心男孩向女孩表白,就给女孩写了一封情书,然后不管女孩有没有收到情书,自己继续向其他女孩表白。我们这里还是以女孩为服务端。
我们首先来看一下服务端的步骤:
接收客户端发送的数据
(1)创建服务器端DatagramSocket指定端口
(2)创建数据报DatagramPacket,接收客户端发送的数据
(3)接收客户端发送的数据
(4)读取数据
向客户端响应数据
(1)定义客户端的地址、端口号、数据
(2)创建数据报,包含响应的数据信息
(3)响应客户端
(4)关闭资源
具体代码来演示一下。
然后再来看一下客户端的请求:
向服务器端发送数据
(1)定义服务器的地址、端口号、数据
(2)创建数据报,包含发送的数据信息
(3)创建DatagramSocket对象
(4)向服务器端发送数据报
接收服务器端响应的数据
(1)创建数据报DatagramPacket,用于接收服务器端响应的数据
(2)接收服务器响应的数据
(3)读取数据
(4)关闭资源
我们再使用java语言来演示一下客户端代码
OK,以上就是socket通信的两种基本方式,这里只是给出了一个最最简单的例子演示,这也是最基础的代码,后续文章会继续加深难度。我们现在来总结一下这个Socket通信
从上面我们可以看到Java提供了非常易用的网络API,调用这些API我们可以很方便的通过建立TCP/IP或UDP套接字,在网络之间进行相互通信,但是其中TCP要比UDP更加常用。但是在一些场景下面。使用无连接的UDP要优于TCP。