网络层:
数据链路层:
物理层:网线、双绞线、网卡等
4、IP地址
为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的标识—IP地址。
32位二进制
5、端口
区分一台主机的多个不同应用程序,端口号范围为0-65535,其中0-1023位为系统保留。
如:HTTP:80 FTP:21 Telnet:23
IP地址+端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础
6、Socket套接字:
网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。
Socket原理机制:
通信的两端都有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
7、Java中的网络支持
针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:
InetAddress:用于标识网络上的硬件资源,主要是IP地址
URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
Sockets:使用TCP协议实现的网络通信Socket相关的类
Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。
二、TCP编程
1、TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低
2、Java中基于TCP协议实现网络通信的类
客户端的Socket类
服务器端的ServerSocket类
3、通信步骤
① 服务端创建ServerSocket和Socket 客户端创建Socket
服务端: ServerSocket ss = new ServerSocket(PORT); //
Socket s = ss.accept();
客户端: Socket clientSocket = new Socket(IP,PORT);
② 打开连接到Socket的输入/输出流
InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
in.close();
out.close();
三、服务端
public class ServerSocketDemo {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9988);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine()) != null) {
System.out.println(“我是服务器,客户端说:” + info);
}
socket.shutdownInput();// 关闭输入流
// 4、获取输出流,响应客户端的请求
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write(“欢迎您!”);
pw.flush();
// 5、关闭资源
pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
}
}
四、客户端
1、创建一个单例Socket管理类·
public class SocketManager {
private static final String TAG = “SocketManager”;
public static Socket clientSocket = null;
private int PORT; //端口号
private String IP;
/**
* 端口
*/
public static SocketManager instance = new SocketManager();
private SocketManager() {
clientSocket = connect();
}
public static SocketManager getInstance() {
return instance;
}
public static Socket getClientSocket() {
return clientSocket;
}
public static void setClientSocket(Socket socket){
clientSocket = socket;
}
/**
* 获取当前socket实例
*/
public Socket connect() {
new Thread(new Runnable() {
@Override
public void run() {
try {
clientSocket = new Socket(IP,PORT);
setClientSocket(clientSocket);
readSocketData(clientSocket);
//sendHeartBeat(clientSocket);
LogUtils.e(“TAG”,“连接成功…”);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return clientSocket;
}
/**
* 发送心跳包
* ThreadPoolManager.getSingleInstance().execute() 线程管理类
* */
public void sendHeartBeat(Socket socket){
ThreadPoolManager.getSingleInstance().execute(new SendData(socket));
}
/**
* 接收服务端数据
* */
public void readSocketData(Socket socket){
ThreadPoolManager.getSingleInstance().execute(new ReceiveData(socket));
}
/**
* 断开连接
*/
public void disConnect() throws IOException {
if (clientSocket != null) {
clientSocket.close();
clientSocket = null;
}
最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
BATJ面试要点及Java架构师进阶资料
加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
NcV-1725616601348)]
[外链图片转存中…(img-dyJu9CDU-1725616601349)]
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
[外链图片转存中…(img-ZNjRrRxU-1725616601349)]
BATJ面试要点及Java架构师进阶资料
[外链图片转存中…(img-LkxMkGdx-1725616601350)]
加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0