TCP/IP--Socket套接字--JAVA
目录
一、概念
二、分类
1.流套接字
2.数据报套接字
三、UDP数据报套接字编程
1.API介绍
2.基于UDP实现简单回显服务器
一、概念
二、分类
1.流套接字
使用传输层TCP协议。TCP协议特点:有链接、可靠传输、面向字节流、有接收缓冲区,也有发送缓冲区、大小不限。
2.数据报套接字
使用传输层UDP协议。
三、UDP数据报套接字编程
1.API介绍
Socket API本身是操作系统的功能,JDK基于操作系统的API进行了封装形成了我们JAVA版本的API。
以下介绍的是UDP的Socket API:
DatagramSocket和DatagramPacket。我们查阅Java文档可以看到这两个Api的详细信息Java Documentation - Get Started。
通过文档我们可以看到DatagramSocket的构造方法:
以及对它详细的解释 :
对它来说主要的方法有三个:
简单来说,我们知道计算机中的“文件”通常是一个广义的概念。文件还能代指一些硬件设备。
那么我们就可以将网卡抽象成Socket文件,操作网卡的时候就和操作普通文件差不多分为三步,打开-->读写-->关闭。由于操作网卡,直接操作是不好操作的,所以我们将操作网卡转换成操作socket文件,socket文件就相当于“网卡的遥控器”。
基于以上这些概念,我们可以理解到DatagramSocket的构造方法就相当于打开文件,创建socket的时候就会关联上一个端口号,使用端口号来区分主机上不同的应用程序。
receive和send方法就相当于读和写。close就是关闭文件。DatagramPacket就表示一个完整的数据报。
DatagramPacket:
UDP数据报的载荷数据就可以通过构造方法来指定。
2.基于UDP实现简单回显服务器
对于回显服务器来说,请求和响应是相同的。
首先我们需要定义一个DatagramSocket对象。我们知道对于一个服务器来说,客户端啥时候发请求,发多少个请求都是我们无法预测的,因此服务器中通常都要有一个死循环持续不断的尝试读取客户端的请求数据,也就是7*24小时运行。
以上代码便实现了一个简单的回显服务器 。
我们还可以在简单写一个客户端来查看运行效果。
运行结果如下:
当然我们也可以在客户端加一个while循环。