网络编程
1、概念:
地球村:表示现代科技的迅速发展,缩小了地球上的空间距离。
TCP:需要对方确认;建立连接
UDP:发送就可以,不用管对方
1.计算机网络:
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通通信协议的管理和协助下,实现资源共享和信息传递的计算机系统。
2.网络编程的目的:
传播交流信息,数据交换。
3.想达到这个效果需要什么
如何准确的定位网络上的一台主机?
192.168.1.1:端口,定位到这个计算机上的某个资源。
找到了这个主机,如何传输数据呢?
javaweb:网页编程——->B/S架构
网络编程:TCP/IP———>C/S架构
2、网络通信的要素
- 2.1如何实现网络的通信?
通信双方的地址:
IP
端口号
规则:网络通信的协议
TCP/IP参考模型:七层传输协议.png
ARP————————>发送广播
小结:
1.网络编程中有两个主要问题
如何准确地定位到网络上的一台或者多台主机?
dos命令中使用ping命令查询
找到主机之后如何进行通信
2.网络编程中的要素
IP和端口号
网络通信协议
3.万物皆对象
3、IP
IP地址:java中inteAddress类
唯一定位一台网络上计算机
127.0.0.1:本机localhost
IP地址的分类
ipv4/ipv6
IPV4:127.0.0.1 , 4个字节组成。 , 每个字节长度0~255,全球有42亿;30亿在北美,亚洲4亿;2011年就用尽了。
IPV6: 128位.8个无符号整数!
公网/私网
公网:互联网使用—->ABCD类IP
私网:局域网使用 192.168.xx.xx,专门给组织用的
域名:记忆IP问题
IP:例如:www.jd.com
代码:
//测试IP
public class TestInetAddress {
public static void main(String[] args) {
try {
//查询本机ip地址
InetAddress inetAddress1=InetAddress.getByName("172.0.0.1");
System.out.println(inetAddress1);
InetAddress inetAddress3=InetAddress.getByName("locathost");
System.out.println(inetAddress3);
InetAddress inetAddress4=InetAddress.getLocalHost();
System.out.println(inetAddress4);
//查询网站ip地址
InetAddress inetAddress2=InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress2);
//常用方法
//System.out.println(inetAddress2.getAddress());//将某个语句加入输出语句中,后面.sout
System.out.println(inetAddress2.getCanonicalHostName());//规范的名字
System.out.println(inetAddress2.getHostAddress());//ip
System.out.println(inetAddress2.getHostName());//域名,或者自己的名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
4、端口
端口表示计算机上的一个程序的进程;
不同的进程有不同的端口号!用来区分软件!
端口被规定:0~65535
TCP/UDP:,每一个都有65535个端口。 TCP使用80端口,UDP也可以使用80端口。这两个协议不冲突。
单个协议下端口不能冲突。
端口分类
公有端口:0~1023(尽量不要占用,一般会被内置程序占用)
- HTTP:默认端口80
- HTTPS:默认端口443
- FTP:默认端口21
程序注册端口:1024~49151,分配给用户或者程序。
- Tomcat:默认端口8080
- MySQL:默认端口3306
- Oracle:默认端口1521
动态、私有端口:49152~65535(尽量不要使用)
netstat -ano: 查看本机所有端口
netstat -ano|findstr “5900”: 查看指定的端口
tasklist|findstr “8696”: 查看指定端口的进程
ctrl+shift+esc:打开任务管理器
代码:
//端口
public class TestInetSocketAddress {
public static void main(String[] args) {
InetSocketAddress socketAddress1 = new InetSocketAddress("127.0.0.1", 8080);
InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);
System.out.println(socketAddress1);
System.out.println(socketAddress2);
System.out.println(socketAddress1.getAddress());
System.out.println(socketAddress1.getHostName());//地址
System.out.println(socketAddress1.getPort());// 端口
}
}
5、通信协议
协议:约定,就好比我们现在说的是普通话。
网络通信协议:速率,传输码率,代码结构,传输控制…..(非常的复杂)
TCP/IP协议簇:实际上是一组协议
TCP:用户传输协议
UDP:用户数据报协议
IP:网络互联协议
TCP与UDP对比:
TCP:
连接,稳定
三次握手,四次挥手
三次握手:
最少需要三次,保证稳定连接!
A:你瞅啥?
B:瞅你咋地?
A:干一场!
四次挥手:
A:我不发了(关闭发送)
B:好,那我不收了(关闭接收)
B:我也不发了(关闭发送)
A:好,那我也不收了(关闭接收)
客户端、服务端
传输完成,释放连接,效率低
UDP:
不连接,不稳定
客户端、服务端:没有明确的界限
不管准没准备好,都可以发给你。
DDOS:洪水攻击!(饱和攻击)
6、TCP实现聊天
客户端:
连接服务器Socket
发送消息
代码:
// 客户端
public class TCPClientDemo01 {
public static void main(String[] args) {
Socket socket =null;
OutputStream os =null;
try {
// 1、要知道服务器的地址,端口号
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
int port = 9999;
// 2.建立一个socket连接
socket = new Socket(serverIP,port);
// 3.发送消息 IO流
os = socket.getOutputStream();
os.write("你好,我给你发消息了".getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
// 先开的后关,后开的先关
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(socket!=null){
try