文章目录
实现思路
TCP是面向连接、可靠的、有序的,以字节流方式发送数据的传输层协议。本程序的实现基于java.net
包,客户端通过Socket
类实现,服务器端通过ServerSocket
类实现,通过输入输出流完成两者之间的信息交互。
Socket通信模型
源码/文档笔记
InetAddress
官方文档说明
InetAddress的一个实例由一个IP地址和可能的相应主机名组成。
常见构造方法
InetAddress的实例无法通过new来创建,常见的几种构造方式:
-
InetAddress.getLocalHost()
将机器名和本地主机的IP地址封装成为一个InetAddress对象并返回,下图为源码说明:
代码示例(在具体实现中需要进行异常处理):InetAddress address = InetAddress.getLocalHost(); System.out.println(address.getHostName()); System.out.println(address.getHostAddress()); // 终端输出 // LAPTOP-C41TTS6B // 192.168.31.217
-
InetAddress.getByName();
接收参数类型为String,参数内容为机器名或者IP地址的String,下图为源码说明
代码示例(在具体实现中需要进行异常处理):// IP字符串示例 InetAddress address = InetAddress.getByName("192.168.31.217"); System.out.println(address); // 终端输出 // LAPTOP-C41TTS6B/192.168.31.217
ServerSocket
官方文档说明
这个类实现了服务器套接字。 服务器套接字等待通过网络进入的请求。 它根据该请求执行一些操作,然后可能将结果返回给请求者。
常见构造方法
ServerSocket(int port)
:将端口号绑定到Socket
ServerSocket(int port, int backlog)
:将端口号和等待队列长度(默认为50)绑定到Socket
ServerSocket(int port, int backlog, InetAddress bindAddr)
:将指定IP和port以及等待队列绑定到Socket
端口号(port)传参为0表示端口号是自动分配的,通常是从短暂的端口范围(0-65535)。这个端口号可以通过调用getLocalPort
来检索。
输入连接指示(连接请求)的最大队列长度(backlog)默认设置为50 。 如果连接指示在队列已满时到达,则连接被拒绝。
方法摘要
ServerSocket.accept()
:监听要连接到Server Socket的Sokcet并接受它。 该方法会阻塞线程,直到建立连接。
ServerSocket.getInputStream()/getOutputStream()
:从Socket中获取输入/输出流,以进行信息的交互。
Socket
官方文档说明
该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。
方法摘要
Socket()
:构造方法,创建一个未连接的套接字,并使用系统默认类型的SocketImpl。
Socket(InetAddress address, int port)
:构造方法,创建流套接字并将其连接到指定IP地址的指定端口号。
Socket.getInputStream()/getOutputStream()
:从Socket中获取输入/输出流,以进行信息的交互。