网络
网络通信协议
要使计算机连成的网络能够互通信息,需要对数据传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定一组标准,这一组共同遵守的通信标准就是网络通信协议,不同的计算机之间必须使用相同的通讯协议才能进行通信。
七层模型
七层模型,也称为OSI(Open System Interconnection)参考模型,是国际标准化组织(ISO)制定的一个用于计算机或通讯系统间互联的标准体系。它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。
ISO 就是 Internationalization Standard Organization(国际标准组织)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cYtCji5C-1661734006742)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823085931473.png)]
TCP/IP 协议
在Internet中TCP/IP协议是使用最为广泛的通讯协议。TCP/IP是英文Transmission Control Protocol/Internet Protocol的缩写,意思是“传输控制协议/网际协议”
**网络:**两台或多台电脑之间能够通信
广域网((WAN)外网), 就是我们通常所说的Internet,它是一个遍及全世界的网络。
局域网((LAN)内网),相对于广域网(WAN)而言,主要是指在小范围内的计算机互联网络。这个“小范围”可以是一个家庭,一所学校,一家公司,或者是一个政府部门。
TCP/IP协议 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准
IP 电脑的一个唯一地址, 方便电脑之间通信,由四个字节组成, 每个字节使用 "."分割: 每一位的范围: 0~255
IP 地址分为五类:A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数据不同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCNygiEv-1661734006743)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823095748320.png)]
域名 使用域名(英文符号) 替换ip, 每个域名映射一个IP地址,例如百度域名www.baidu.com绑定了一个IP地址14.215.177.39, 访问百度: 根据ip访问
IP地址可以用于确定要与哪台电脑通信,底层:把域名转换为IP地址
端口 端口号, 0~65535个 , 具有网络功能的应用软件的标识号,可以指定要与这台电脑的哪个程序通信。 0-1023是公认端口号,即已经公认定义或为将要公认定义的软件保留的 ;1024-65535是并没有公共定义的端口号,用户可以自己定义这些端口的作用。
http: 默认端口: 80
https: 默认端口: 443
mysql的默认端口: 3306
端口: TCP: 0~65535 UDP:0~65535
TCP 面向连接的,可靠的,基于字节流的传输层协议; TCP通信的时,在发送数据之前, 与对方建立一个连接, ( TCP协议建立连接需要三次会话(握手),三次握手机制)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuqKDiGP-1661734006744)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823093236623.png)]
TCP通信
Socket编程:
Socket (客户端的套接字)
ServerSocket(服务端的套接字(Socket))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYIfgtCT-1661734006746)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823103822975.png)]
当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器此时可以通过对 Socket 对象的写入和读取(字节流)来进行通信。
流式套接字: TCP, 面向连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baAQQ8Oo-1661734006746)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105048585.png)]
核心类
ServerSocket: 服务器套接字, 等待客户端的连接
构造方法(绑定到指定端口)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exxuFu0w-1661734006747)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105301424.png)]
常用方法
侦听并接收到此ServerSocket的连接,此方法在连接传入之前一直阻塞
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xsjn10ld-1661734006748)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105432115.png)]
监听端口,等待客户端的连接,一旦有客户端连接了, 得到一个与客户端一对一的Socket
Socket类
Socket的构造共有9种,这里介绍2种常用的构造方法:
构造方法 | 说明 |
---|---|
Socket(String host, int port) | 向host主机的port端口发起连接请求 |
[Socket](mk:@MSITStore:C:\DOCUME1\ADMINI1\LOCALS~1\Temp\Rar D I a 0.501 % 5 b J a v a 参考文档 DIa0.501\%5bJava参考文档%5d.JDK_API_1_6_zh_CN.CHM::/java/net/Socket.html#Socket(java.lang.String, int, java.net.InetAddress, int))([String](mk:@MSITStore:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rar DIa0.501%5bJava参考文档DIa0.501%5bJava参考文档%5d.JDK_API_1_6_zh_CN.CHM::/java/lang/String.html) host, int port, InetAddress localAddr, int localPort) | 向host主机的port端口发起连接请求,发起请求的计算机为localAddr,端口为localPort |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glLPeIhM-1661734006749)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105552852.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pNoMVQy-1661734006750)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110444218.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YxEWLvqD-1661734006751)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110559349.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8Mz4jxd-1661734006752)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110626378.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqcNULqa-1661734006752)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110637452.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZybEEgov-1661734006753)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110637452.png)]
TCP通信步骤
服务器端
1:)创建一个ServerSocket
2:)调用accept(),等到客户端的连接
3:)得到客户端的Socket对象, 调用getInputStream() getOutputStream() 得到输入输出流
4:)输入流接收数据, 输出流发送数据
5:)关闭资源
客户端
1:)创建一个Socket, 请求服务器地址, 端口, 与服务器进行连接
2:)调用getInputStream() getOutputStream() 得到输入输出流
3:)输出流发送数据,输入流接收数据,
4:)关闭资源
启动顺序: 先启动服务器, 再启动客户端
服务端编程
public class Server {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
try {
//准备服务器端用的通讯对象(套接字),指明端口号为8888
server = new ServerSocket(8888);
//到指定端口去阻塞监听,一旦有客户端请求发送过来,那么立即自动与客户端建立连接
socket = server.accept();
System.out.println("服务器端准备ok");
//我要发送到客户端的内容
String msg = "你好,我是服务器,这是我的第一次通讯,请问你收到了吗";
OutputStream os = socket.getOutputStream();//准备输出对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(msg);
bw.newLine();
bw.flush();
//接收客户端发送的信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String reply = br.readLine();
System.out.println("我是服务器,接收到信息:"+reply);
br.close();
is.close();
bw.close();
os.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端编程
public class Client {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost", 8888);
System.out.println("客户端准备完成");
//客户端开始接受请求
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg = br.readLine();
System.out.println("我是客户端,接收到信息:"+msg);
//客户端接收到服务器端的信息之后,需要反馈信息给服务器
//客户端想要反馈给服务器端的信息
String reply = "我是客户端,收到你的信息,这是我的反馈";
OutputStream os = socket.getOutputStream();//准备客户端的输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(reply);
bw.newLine();
bw.flush();
bw.close();
os.close();
br.close();
is.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
idea设置一个程序运行多次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOJ58gpG-1661734006754)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823114549421.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NO1RPl2d-1661734006755)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823114719745.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nc0x4dS6-1661734006755)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823114752213.png)]
UDP通信
ception e) {
e.printStackTrace();
}
}
}
#### idea设置一个程序运行多次
[外链图片转存中...(img-XOJ58gpG-1661734006754)]
[外链图片转存中...(img-NO1RPl2d-1661734006755)]
[外链图片转存中...(img-Nc0x4dS6-1661734006755)]
## UDP通信