网络通信Socket
网络编程的三要素
- ip地址:网络中设备的唯一标识
- 端口号:标识是哪个应用程序
- 协议:UDP和TCP
InetAddress的使用
| | |
| | |
UDP协议
- 用户数据报协议(User Datagram Protocol)
- UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
- 由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于
音频、视频和普通数据的传输。例如
视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大 影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。
TCP协议
- 传输控制协议 (Transmission Control Protocol)
- TCP协议是
面向连接的通信协议, 即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,
它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。 - 三次握手: TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠性。
第1次握手,客户端向服务器端发出连接请求,等待服务器确认
第2次握手,服务器端向客户端回送一个响应, 通知客户端收到了连接请求
第3次握手,客户端再次向服务器端发送确认信息,确认连接 - 完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如
上传文件、下载文件、 浏览网页等
什么是Socket
socket称为"套接字" ,应用程序通常通过"套接字"向网络发出请求或应答网络请求。
在Java中,Socket和ServerSocket类库位 于java.net包中。ServerSocket用于 服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于-一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket,它们的工作都是通过Socket类及其子类完成的。
Socket连接的建立过程
- 服务器监听
- 客户端发送请求
- 建立连接
- 通信
Socket的特点
- Socket基于TCP链接,数据传输有保障
- Socket适用于建立长时间链接
- Socket编程通常应用于即时通讯
UDP通信
UDP 通信原理
UDP协议是一种不可靠的网络协议, 它在通信的两端各建立-一个Socke对象, 但是这两个Socket只是发送,接收数据的对象。因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。
Java提供了DatagramSocket类作为基于UDP协议的Socket
UDP发送数据
- 创建发送端的socket对象(DatagramSocket)
DatagramSocket ds=new DatagramSocket(); - 创建数据并把数据打包
DatagramPacket dp=new DatagramPacket(bytes, bytes.length,address,10086); - 调用DatagramSocket对象的方法发送数据
ds.send(dp); - 关闭发送端
ds.close();
UDP接收数据
- 创建接收端的Socket对象(DatagramSocket)
- 创建一个数据包,用于接收数据
- 调用DatagramSocket对象的方法接收数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
TCP通信
TCP通信原理
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象, 从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。
Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口并通过Socket产生IO流来进行网络通信。
Java为客户端提供了Socket类,为服务端提供了ServerSocket类
通信示意图:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
