什么是计算机网络?
把分布在不同地理区域的计算机设备通过物理线路连接(网络,光纤,交换机)起来,最终实现数据传输,资源共享;
最早的网络:美国五角大楼
网络编程概述:
在网络的基础上,开发的程序能够进行数据传输;
java语言是支持网络的;
java语言将网络连接的细节都封装起来了,对外提供一套网络库(类);就可以进行统一环境的网络编程;
进行网络数据传输,核心:
如何找到网络世界中的目标主机和程序;(IP和端口)
找到后如何高效安全的进行数据传输(协议)
网络模型:TCP/IP模型
应用层:
QQ 微信 内容
传输层:
加入协议控制
网络层:
IP 协议控制
物理层:
网线 光纤
IP 端口 协议
IP(Internet Protocol Address)是指互联网协议,计算机地址
ipconfig 局域网ip 192.168.·······
本机地址:127.0.0.1 访问自己电脑
端口:端口号是计算机中的应用程序的一个整数数字标号,用来区分不同的应用程序。
0 ~ 1024 未被系统使用或保留的端口号,0 ~ 65535为有效的端口号,
也就是说我们要对一些程序定义端口号的时候,要选择1024 ~ 65535范围内的整数数字。
比如,MySQL的端口号是3306,SQLServer的端口号是1433,查了一下Oracle的端口号是1521。
网络通信协议(规则 规范 约定)
● 传输层协议中有两个非常重要的协议:
● 传输控制协议TCP(Transmission Control Protocol)
客户端向服务器端发送数据,首先要建立连接(测试网络是否通畅)
正式传输数据
断开时互相确认
建立连接:三次握手、
第一次:客户端向服务器发送请求
第二次:当服务器收到客户端连接请求后,给客户端做出一个回应
第三次:客户端为服务器的回应做出确认回应
四次挥手
1.客户端向服务器发送一个断开的请求
2.服务器向客户端做出一个回应
3.服务区端把没有传完的数据传输完毕,在向客户端做出回应
4.客户端向服务器端回应做出回应
5.断开
● 用户数据报协议UDP(User Datagram Protocol)
把发送的数据封装成一个数据报(数据包)
数据包包含数据,对方的ip,对方的端口,只管发送即可,是否发送成功不知道;
• 将数据、源(你的IP)、目的封装成数据包,不需要建立连接
• 每个数据报的大小限制在64K内
• 因无需连接,故是不可靠的
• 发送数据结束时无需释放资源,速度快
UDP编程
● 类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。
● UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP
数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
● DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址
和端口号以及接收端的IP地址和端口号。
● UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方
的连接
● 流 程:
-
DatagramSocket与DatagramPacket
-
建立发送端,接收端
-
建立数据报
-
调用Socket的发送、接收方法
-
关闭Socket
● 发送端与接收端是两个独立的运行程序
• 发送端
DatagramSocket ds = new DatagramSocket();
byte[] by = “hello,baidu.com”.getBytes();
DatagramPacket dp = new DatagramPacket(by,0,by.length,
InetAddress.getByName(“127.0.0.1”),10000);
ds.send(dp);
ds.close();
• 接收端,要指定监听的端口。
DatagramSocket ds = new DatagramSocket(10000);
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by,by.length);
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str+"--"+dp.getAddress());
ds.close();