上图中的localhost是127.0.0.1的域名
InetAddress是JDK中的ip处理类
jdk的API中文文档
运行结果:
端口号(port),名字(hostname),IP地址的关系
运行结果:
套接字:
其实很好理解:
就像是我想给你邮一个水杯,但是我不可能就一个水杯邮给你,我是不是要把它装在盒子里面,盒子里面填充一些泡沫,然后我还要在盒子上贴一个你的地址,这就是封装啊,反之就是拆封。
一般什么时候,什么场景下用到socket呢?
就是你要给网站或者app实现一个聊天功能,进行网络数据传输
DatagramSocket:
此类表示用于发送和接收数据报包的套接字。
数据报套接字是分组传送服务的发送或接收点。 在数据报套接字上发送或接收的每个数据包都是单独寻址和路由的。 从一台机器发送到另一台机器的多个分组可以被不同地路由,并且可以以任何顺序到达。
DatagramPacket
该类表示数据报包。
数据报分组用于实现无连接分组传递服务。 每个消息仅根据该数据包中包含的信息从一台机器路由到另一台机器。 从一台机器发送到另一台机器的多个数据包可能会以不同方式路由,并且可能以任何顺序到达。 无法保证数据包传输。
通过参数的不同来区分作用,接受和发送…
UDP实现的基本流程:
发送端定义:
发送端实现:
接收端定义:
接收端实现:
运行结果:
若在接收端加入如下代码:
输出结果:
里面有一些不熟悉的类或者函数可以查阅上面JDK的API文档。
TCP协议是基于IO流的。
所以在TCP协议下,我要定义客户端,就用socket这个类;定义服务端用serveSocket类
我往服务器发送数据,就是数据从我这儿写出去,那对我来说就是一个输出的过程
客户端定义与实现:
注意:上面这张图中的:
127.0.0.1和6666是服务器端的地址和端口
Class Socket:该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通信的端点。
服务器端定义与实现:
Class ServerSocket:该类实现服务器套接字。 服务器套接字等待通过网络进入的请求。 它根据该请求执行某些操作,然后可能将结果返回给请求者。
注意:运行的时候,要先运行服务器,再运行客户端。
单向登录:
客户端:
服务端:
因为要判断登录时输入的用户名和密码是否正确,所以要在//3.io这一部分后面加入校验流程:
运行结果:
双向登录:也就是实时地将单向登录的服务器的登录结果传输到客户端,然后客户端接收到结果。
客户端:
在2、io和3、关闭之间添加如下代码:
服务端:
将上面这部分代码修改为: